From 38779254e5a20377ebccb91e52d69dccdcbe7b86 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sun, 13 May 2018 18:56:31 +0100 Subject: [PATCH] Check cargo action count consistencies on load Add scope info logging to AfterLoadVehicles --- src/cargopacket.h | 13 +++++++++++-- src/saveload/vehicle_sl.cpp | 9 +++++++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/cargopacket.h b/src/cargopacket.h index 945c9e4839..ed2047cb11 100644 --- a/src/cargopacket.h +++ b/src/cargopacket.h @@ -309,17 +309,26 @@ protected: template void PopCargo(Taction action); +public: + /** * Assert that the designation counts add up. */ inline void AssertCountConsistency() const { - assert(this->action_counts[MTA_KEEP] + + assert_msg(this->action_counts[MTA_KEEP] + this->action_counts[MTA_DELIVER] + this->action_counts[MTA_TRANSFER] + - this->action_counts[MTA_LOAD] == this->count); + this->action_counts[MTA_LOAD] == this->count, + "%u + %u + %u + %u != %u", + this->action_counts[MTA_KEEP], + this->action_counts[MTA_DELIVER], + this->action_counts[MTA_TRANSFER], + this->action_counts[MTA_LOAD], + this->count); } +protected: void AddToCache(const CargoPacket *cp); void RemoveFromCache(const CargoPacket *cp, uint count); diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp index 8a76114b3e..68cdb2620f 100644 --- a/src/saveload/vehicle_sl.cpp +++ b/src/saveload/vehicle_sl.cpp @@ -20,6 +20,8 @@ #include "../company_base.h" #include "../company_func.h" #include "../disaster_vehicle.h" +#include "../scope_info.h" +#include "../string_func.h" #include "saveload.h" @@ -248,8 +250,8 @@ extern byte _age_cargo_skip_counter; // From misc_sl.cpp /** Called after load to update coordinates */ void AfterLoadVehicles(bool part_of_load) { - Vehicle *v; - + Vehicle *v = nullptr; + SCOPE_INFO_FMT([&v], "AfterLoadVehicles: %s", scope_dumper().VehicleInfo(v)); FOR_ALL_VEHICLES(v) { /* Reinstate the previous pointer */ if (v->Next() != NULL) v->Next()->previous = v; @@ -326,6 +328,7 @@ void AfterLoadVehicles(bool part_of_load) /* The road vehicle subtype was converted to a flag. */ RoadVehicle *rv; FOR_ALL_ROADVEHICLES(rv) { + v = rv; if (rv->subtype == 0) { /* The road vehicle is at the front. */ rv->SetFrontEngine(); @@ -369,6 +372,7 @@ void AfterLoadVehicles(bool part_of_load) } } } + v = nullptr; CheckValidVehicles(); @@ -469,6 +473,7 @@ void AfterLoadVehicles(bool part_of_load) v->coord.left = INVALID_COORD; v->UpdatePosition(); v->UpdateViewport(false); + v->cargo.AssertCountConsistency(); } }