diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -3364,8 +3364,11 @@ static void TrainController(Train *v, Ve } /* If we would reverse but are currently in a PBS block and - * reversing of stuck trains is disabled, don't reverse. */ - if (_settings_game.pf.wait_for_pbs_path == 255 && UpdateSignalsOnSegment(v->tile, enterdir, v->owner) == SIGSEG_PBS) { + * reversing of stuck trains is disabled, don't reverse. + * This does not apply if the reason for reversing is a one-way + * signal blocking us, because a train would then be stuck forever. */ + if (_settings_game.pf.wait_for_pbs_path == 255 && !HasOnewaySignalBlockingTrackdir(gp.new_tile, i) && + UpdateSignalsOnSegment(v->tile, enterdir, v->owner) == SIGSEG_PBS) { v->wait_counter = 0; return; }