diff --git a/src/AIModel/AIAircraft.cxx b/src/AIModel/AIAircraft.cxx index c824e73a5..d29904b5a 100644 --- a/src/AIModel/AIAircraft.cxx +++ b/src/AIModel/AIAircraft.cxx @@ -120,7 +120,7 @@ FGAIAircraft::~FGAIAircraft() assert(!controller); if (controller) { // we no longer signOff from controller here, controller should - // have been cleared using clearATCCOntrollers + // have been cleared using clearATCControllers // see FLIGHTGEAR-15 on Sentry SG_LOG(SG_AI, SG_ALERT, "Destruction of AIAircraft which was not unbound"); } diff --git a/src/AIModel/AIManager.cxx b/src/AIModel/AIManager.cxx index 859aa411a..4aea54672 100644 --- a/src/AIModel/AIManager.cxx +++ b/src/AIModel/AIManager.cxx @@ -319,7 +319,14 @@ FGAIManager::shutdown() ai_list.clear(); _environmentVisiblity.clear(); - _userAircraft.clear(); + + if (_userAircraft) { + _userAircraft->setDie(true); + // we can't unbind() but we do need to clear these + _userAircraft->clearATCController(); + _userAircraft.clear(); + } + static_haveRegisteredScenarios = false; globals->get_commands()->removeCommand("load-scenario"); diff --git a/src/ATC/trafficcontrol.cxx b/src/ATC/trafficcontrol.cxx index 739540e38..fb67404e0 100644 --- a/src/ATC/trafficcontrol.cxx +++ b/src/ATC/trafficcontrol.cxx @@ -59,9 +59,12 @@ namespace { void clearTrafficControllers(TrafficVector& vec) { - TrafficVectorIterator it = vec.begin(); - for (; it != vec.end(); ++it) { - it->getAircraft()->clearATCController(); + for (const auto& traffic : vec) { + if (!traffic.getAircraft()) { + continue; + } + + traffic.getAircraft()->clearATCController(); } }