(svn r14021) -Fix (r13957) [YAPP]: Overbuilding station tiles with non-track tiles could produce stale reservations. (michi_cc)
--- a/src/station_cmd.cpp Fri Aug 08 09:31:50 2008 +0000
+++ b/src/station_cmd.cpp Fri Aug 08 13:29:18 2008 +0000
@@ -1031,6 +1031,9 @@
if (v != NULL) {
FreeTrainTrackReservation(v);
*affected_vehicles.Append() = v;
+ if (IsRailwayStationTile(v->tile)) SetRailwayStationPlatformReservation(v->tile, TrackdirToExitdir(GetVehicleTrackdir(v)), false);
+ for (; v->Next() != NULL; v = v->Next()) ;
+ if (IsRailwayStationTile(v->tile)) SetRailwayStationPlatformReservation(v->tile, TrackdirToExitdir(ReverseTrackdir(GetVehicleTrackdir(v))), false);
}
}
@@ -1059,7 +1062,11 @@
} while (--numtracks);
for (uint i = 0; i < affected_vehicles.Length(); ++i) {
- TryPathReserve(affected_vehicles[i], true);
+ Vehicle *v = affected_vehicles[i];
+ if (IsRailwayStationTile(v->tile)) SetRailwayStationPlatformReservation(v->tile, TrackdirToExitdir(GetVehicleTrackdir(v)), true);
+ TryPathReserve(v, true);
+ for (; v->Next() != NULL; v = v->Next()) ;
+ if (IsRailwayStationTile(v->tile)) SetRailwayStationPlatformReservation(v->tile, TrackdirToExitdir(ReverseTrackdir(GetVehicleTrackdir(v))), true);
}
st->MarkTilesDirty(false);
--- a/src/train_cmd.cpp Fri Aug 08 09:31:50 2008 +0000
+++ b/src/train_cmd.cpp Fri Aug 08 13:29:18 2008 +0000
@@ -1949,6 +1949,7 @@
HasSignalOnTrackdir(v->tile, GetVehicleTrackdir(v)) &&
!IsPbsSignal(GetSignalType(v->tile, FindFirstTrack(v->u.rail.track))));
+ if (IsRailwayStationTile(v->tile)) SetRailwayStationPlatformReservation(v->tile, TrackdirToExitdir(GetVehicleTrackdir(v)), true);
if (TryPathReserve(v, true, first_tile_okay)) {
/* Do a look-ahead now in case our current tile was already a safe tile. */
CheckNextTrainTile(v);