From 99b79c26c6ca572d025106599e4b7201c3a57673 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Wed, 27 Mar 2019 00:36:06 +0000 Subject: [PATCH] Remove disaster vehicles from tick cache immediately on deletion --- src/vehicle.cpp | 10 ++++++++++ src/vehicle_base.h | 1 + 2 files changed, 11 insertions(+) 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 */