diff --git a/src/economy.cpp b/src/economy.cpp index b45e14e70d..3cb4b11cb7 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -407,7 +407,7 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner) if (v->owner == old_owner && IsCompanyBuildableVehicleType(v->type)) { if (new_owner == INVALID_OWNER) { if (v->Previous() == NULL) { - if (_settings_game.economy.infrastructure_sharing[VEH_TRAIN] && v->type == VEH_TRAIN && Train::From(v)->IsFrontEngine()) { + if (_settings_game.economy.infrastructure_sharing[VEH_TRAIN] && v->type == VEH_TRAIN && Train::From(v)->IsFrontEngine() && !Train::From(v)->IsVirtual()) { DeleteVisibleTrain(Train::From(v)); } else { delete v; diff --git a/src/infrastructure.cpp b/src/infrastructure.cpp index cb8a4fdfb4..59afb0dbde 100644 --- a/src/infrastructure.cpp +++ b/src/infrastructure.cpp @@ -175,7 +175,7 @@ static void RemoveAndSellVehicle(Vehicle *v, bool give_money) } /* take special measures for trains, but not when sharing is disabled or when the train is a free wagon chain */ - if (_settings_game.economy.infrastructure_sharing[VEH_TRAIN] && v->type == VEH_TRAIN && Train::From(v)->IsFrontEngine()) { + if (_settings_game.economy.infrastructure_sharing[VEH_TRAIN] && v->type == VEH_TRAIN && Train::From(v)->IsFrontEngine() && !Train::From(v)->IsVirtual()) { DeleteVisibleTrain(Train::From(v)); } else { delete v; diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index c4267bd8a4..ae0c0b7f80 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -4754,6 +4754,8 @@ void DeleteVisibleTrain(Train *v) { SCOPE_INFO_FMT([v], "DeleteVisibleTrain: %s", scope_dumper().VehicleInfo(v)); + assert(!v->IsVirtual()); + FreeTrainTrackReservation(v); TileIndex crossing = TrainApproachingCrossingTile(v);