From 9e93ee3a458747c7d6bc8fff4092e1f25662b534 Mon Sep 17 00:00:00 2001 From: michi_cc Date: Thu, 15 Jul 2010 19:15:21 +0000 Subject: [PATCH] (svn r20156) -Fix [FS#3937]: [YAPP] Converting a one-way block to a path signal with trains on both sides could lead to a train crash. --- src/pbs.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/pbs.cpp b/src/pbs.cpp index e3b8fa9619..dbf7c0d556 100644 --- a/src/pbs.cpp +++ b/src/pbs.cpp @@ -314,6 +314,10 @@ Train *GetTrainForReservation(TileIndex tile, Track track) * have a train on it. We need FollowReservation to ignore one-way signals * here, as one of the two search directions will be the "wrong" way. */ for (int i = 0; i < 2; ++i, trackdir = ReverseTrackdir(trackdir)) { + /* If the tile has a one-way block signal in the current trackdir, skip the + * search in this direction as the reservation can't come from this side.*/ + if (HasOnewaySignalBlockingTrackdir(tile, ReverseTrackdir(trackdir)) && !HasPbsSignalOnTrackdir(tile, trackdir)) continue; + FindTrainOnTrackInfo ftoti; ftoti.res = FollowReservation(GetTileOwner(tile), rts, tile, trackdir, true);