diff --git a/src/vehicle.cpp b/src/vehicle.cpp index a1f8d983be..d8c0f4801a 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -1022,6 +1022,8 @@ Vehicle::~Vehicle() if (this->type != VEH_EFFECT) InvalidateVehicleTickCaches(); + if (this->type == VEH_DISASTER) RemoveFromOtherVehicleTickCache(this); + if (this->breakdowns_since_last_service) _vehicles_to_pay_repair.erase(this); if (this->type < VEH_BEGIN || this->type >= VEH_COMPANY_END) { @@ -1145,6 +1147,13 @@ void ClearVehicleTickCaches() _tick_other_veh_cache.clear(); } +void RemoveFromOtherVehicleTickCache(const Vehicle *v) +{ + for (auto &u : _tick_other_veh_cache) { + if (u == v) u = nullptr; + } +} + void RebuildVehicleTickCaches() { Vehicle *v = NULL; @@ -1300,6 +1309,7 @@ void CallVehicleTicks() } { for (Vehicle *u : _tick_other_veh_cache) { + if (!u) continue; v = u; u->Tick(); } diff --git a/src/vehicle_base.h b/src/vehicle_base.h index a0f90ff908..c67f7d3fc8 100644 --- a/src/vehicle_base.h +++ b/src/vehicle_base.h @@ -1299,5 +1299,6 @@ inline void InvalidateVehicleTickCaches() } void ClearVehicleTickCaches(); +void RemoveFromOtherVehicleTickCache(const Vehicle *v); #endif /* VEHICLE_BASE_H */