summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormaedhros <maedhros@openttd.org>2007-06-02 14:42:25 +0000
committermaedhros <maedhros@openttd.org>2007-06-02 14:42:25 +0000
commit229e311cb904b43fed1a7cce821c4137ccd87630 (patch)
tree203f008545f005e24fd36ddd2035618327891b01
parent1e7b8190f2ad02d1572b28308473dc7696ea9b0e (diff)
downloadopenttd-229e311cb904b43fed1a7cce821c4137ccd87630.tar.xz
(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.
-rw-r--r--src/train_cmd.cpp9
1 files changed, 9 insertions, 0 deletions
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);