(svn r3127) -Fix: [autoreplace] fixed a condition where a vehicle could fail to stop when autoreplacing
authorbjarni
Thu, 03 Nov 2005 19:51:28 +0000
changeset 2590 5603f43c8cd3
parent 2589 28c7b9b212af
child 2591 76a053785b35
(svn r3127) -Fix: [autoreplace] fixed a condition where a vehicle could fail to stop when autoreplacing
this would result in the construction of a new vehicle while the old one just continued
added an assert to make sure it's always stopped before trying to sell the old vehicle
vehicle.c
--- a/vehicle.c	Thu Nov 03 18:27:29 2005 +0000
+++ b/vehicle.c	Thu Nov 03 19:51:28 2005 +0000
@@ -527,15 +527,15 @@
 void VehicleEnteredDepotThisTick(Vehicle *v)
 {
 	// we need to set v->leave_depot_instantly as we have no control of it's contents at this time
-	if (!HASBIT(v->current_order.flags, OFB_HALT_IN_DEPOT)) {
+	if (HASBIT(v->current_order.flags, OFB_HALT_IN_DEPOT) && !HASBIT(v->current_order.flags, OFB_PART_OF_ORDERS)) {
+		// we keep the vehicle in the depot since the user ordered it to stay
+		v->leave_depot_instantly = false;
+	} else {
 		// the vehicle do not plan on stopping in the depot, so we stop it to ensure that it will not reserve the path
 		// out of the depot before we might autoreplace it to a different engine. The new engine would not own the reserved path
 		// we store that we stopped the vehicle, so autoreplace can start it again
 		v->vehstatus |= VS_STOPPED;
 		v->leave_depot_instantly = true;
-	} else {
-		// we keep the vehicle in the depot
-		v->leave_depot_instantly = false;
 	}
 
 	if (_first_veh_in_depot_list == NULL) {
@@ -1623,6 +1623,8 @@
 
 	assert(v->type == VEH_Train || v->type == VEH_Road || v->type == VEH_Ship || v->type == VEH_Aircraft);
 
+	assert(v->vehstatus & VS_STOPPED);	// the vehicle should have been stopped in VehicleEnteredDepotThisTick() if needed
+
 	if (v->leave_depot_instantly) {
 		// we stopped the vehicle to do this, so we have to remember to start it again when we are done
 		// we need to store this info as the engine might be replaced and lose this info