Index: src/aircraft.h =================================================================== --- src/aircraft.h (revision 14290) +++ src/aircraft.h (working copy) @@ -130,4 +130,11 @@ bool FindClosestDepot(TileIndex *location, DestinationID *destination, bool *reverse); }; +/** + * Clears the blocks created by the specified aircraft + * @note This have to be used when cleaning up aircraft to have its airport's blockings removed + * @param v Vehicle + */ +void AirportForceClearBlocks(const Vehicle *v); + #endif /* AIRCRAFT_H */ Index: src/aircraft_cmd.cpp =================================================================== --- src/aircraft_cmd.cpp (revision 14290) +++ src/aircraft_cmd.cpp (working copy) @@ -1770,6 +1770,15 @@ } } +void AirportForceClearBlocks(const Vehicle *v) +{ + Station *st = GetStation(v->u.air.targetairport); + const AirportFTAClass *apc = st->Airport(); + + CLRBITS(st->airport_flags, apc->layout[v->u.air.previous_pos].block); + CLRBITS(st->airport_flags, apc->layout[v->u.air.pos].block); +} + static void AirportGoToNextPosition(Vehicle *v) { /* if aircraft is not in position, wait until it is */ Index: src/vehicle.cpp =================================================================== --- src/vehicle.cpp (revision 14290) +++ src/vehicle.cpp (working copy) @@ -694,6 +694,11 @@ { assert(v->First() == v); + if (v->type == VEH_AIRCRAFT) + { + AirportForceClearBlocks(v); + } + do { Vehicle *u = v; /* sometimes, eg. for disaster vehicles, when company bankrupts, when removing crashed/flooded vehicles,