From b312055c805286641ce1fb57fb7efdc63daed870 Mon Sep 17 00:00:00 2001 From: celestar Date: Sun, 30 Jan 2005 22:04:14 +0000 Subject: (svn r1743) -Fix: Multistop: Added some debug output and made sure that orphaned slots are cleared. --- station_cmd.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'station_cmd.c') diff --git a/station_cmd.c b/station_cmd.c index a1694a009..d6d81c702 100644 --- a/station_cmd.c +++ b/station_cmd.c @@ -2398,6 +2398,43 @@ static void StationHandleBigTick(Station *st) if (++st->delete_ctr >= 8) DeleteStation(st); } + + //Here we saveguard against orphaned slots + { + RoadStop *rs; + + for (rs = GetPrimaryRoadStop(st, RS_BUS); rs != NULL; rs = rs->next) { + int k; + for (k = 0; k < NUM_SLOTS; k++) { + if (rs->slot[k] != INVALID_SLOT) { + Vehicle *v = GetVehicle(rs->slot[k]); + + if (v->u.road.slot != rs) { + DEBUG(misc, 1) ("Bus Slot Desync! cleaning up (Don't panic)"); + v->u.road.slot = NULL; + v->u.road.slot_age = 0; + rs->slot[k] = INVALID_SLOT; + } + } + } + } + + for (rs = GetPrimaryRoadStop(st, RS_TRUCK); rs != NULL; rs = rs->next) { + int k; + for (k = 0; k < NUM_SLOTS; k++) { + if (rs->slot[k] != INVALID_SLOT) { + Vehicle *v = GetVehicle(rs->slot[k]); + + if (v->u.road.slot != rs) { + DEBUG(misc, 1) ("Truck Slot Desync! cleaning up (Don't panic)"); + v->u.road.slot = NULL; + v->u.road.slot_age = 0; + rs->slot[k] = INVALID_SLOT; + } + } + } + } + } } static inline void byte_inc_sat(byte *p) { byte b = *p + 1; if (b != 0) *p = b; } -- cgit v1.2.3-54-g00ecf