From 229e311cb904b43fed1a7cce821c4137ccd87630 Mon Sep 17 00:00:00 2001 From: maedhros Date: Sat, 2 Jun 2007 14:42:25 +0000 Subject: (svn r10023) -Fix (r3218): When selling trains, if there were no wagons between multiheaded engines the rear part could be checked despite having already been deleted, triggering an assert. --- src/train_cmd.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 9f8318a55..4c7bf90cf 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -1347,6 +1347,15 @@ int32 CmdSellRailWagon(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) if (rear != NULL) { cost -= rear->value; + + /* If this is a multiheaded vehicle with nothing + * between the parts, tmp will be pointing to the + * rear part, which is unlinked from the train and + * deleted here. However, because tmp has already + * been set it needs to be updated now so that the + * loop never sees the rear part. */ + if (tmp == rear) tmp = GetNextVehicle(tmp); + if (flags & DC_EXEC) { first = UnlinkWagon(rear, first); DeleteDepotHighlightOfVehicle(rear); -- cgit v1.2.3-54-g00ecf