summaryrefslogtreecommitdiff
path: root/src/train_cmd.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/train_cmd.cpp')
-rw-r--r--src/train_cmd.cpp7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp
index 31c0eccad..5723f3d47 100644
--- a/src/train_cmd.cpp
+++ b/src/train_cmd.cpp
@@ -3364,8 +3364,11 @@ static void TrainController(Train *v, Vehicle *nomove)
}
/* 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;
}