diff --git a/src/cargopacket.cpp b/src/cargopacket.cpp index aafd23eb9a..19cc32ea33 100644 --- a/src/cargopacket.cpp +++ b/src/cargopacket.cpp @@ -636,7 +636,7 @@ bool VehicleCargoList::Stage(bool accepted, StationID current_station, StationID CargoPacketList transfer_deliver; std::vector keep; - const FlowStatMap &flows = ge->CreateData().flows; + const FlowStatMap &flows = ge->ConstFlows(); bool force_keep = (order_flags & OUFB_NO_UNLOAD) != 0; bool force_unload = (order_flags & OUFB_UNLOAD) != 0; diff --git a/src/linkgraph/linkgraphjob.cpp b/src/linkgraph/linkgraphjob.cpp index 126187fb37..d486aa2c00 100644 --- a/src/linkgraph/linkgraphjob.cpp +++ b/src/linkgraph/linkgraphjob.cpp @@ -182,6 +182,7 @@ void LinkGraphJob::FinaliseJob() geflows.insert(std::move(*it)); } geflows.SortStorage(); + ge.RemoveDataIfUnused(); InvalidateWindowData(WC_STATION_VIEW, st->index, this->Cargo()); } } diff --git a/src/station_base.h b/src/station_base.h index 9e8f47642f..360c742370 100644 --- a/src/station_base.h +++ b/src/station_base.h @@ -715,6 +715,11 @@ struct GoodsEntry { { return this->data != nullptr ? this->data->flows : _empty_flows; } + + void RemoveDataIfUnused() + { + if (this->data != nullptr && this->data->MayBeRemoved()) this->data.reset(); + } }; /** All airport-related information. Only valid if tile != INVALID_TILE. */