From 56d8181da3907eb159a591903c216fdce96fcb81 Mon Sep 17 00:00:00 2001
From: mfranz <mfranz>
Date: Sun, 11 Jun 2006 15:18:48 +0000
Subject: [PATCH] remove the "ai_model" subsystem manually before the other
 subsystems are taken down by the C++ runtime environment. This will later be
 done with runlevels. Why would we want to run nasal code in subsystem
 destructors? We don't really. But some data structures may use nasal, which
 are normally created/destroyed during runtime. And these will also be
 destroyed at fgfs exit. In the past things like these didn't happen, because
 someone had disabled all subsystem destructors ...

---
 src/Main/util.cxx | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/Main/util.cxx b/src/Main/util.cxx
index 2a62521d4..3daeb991b 100644
--- a/src/Main/util.cxx
+++ b/src/Main/util.cxx
@@ -104,8 +104,13 @@ fgSetupWind (double min_hdg, double max_hdg, double speed, double gust)
 void
 fgExit (int status)
 {
-    SG_LOG(SG_GENERAL, SG_INFO, "Exiting FlightGear with status " << status);
+    // remove subsystems first, which need access to other subsystems in their
+    // destructors (e.g. "nasal")
+    SGSubsystem *sub = globals->get_subsystem("ai_model");
+    globals->get_subsystem_mgr()->get_group(SGSubsystemMgr::GENERAL)->remove_subsystem("ai_model");
+    delete sub;
 
+    SG_LOG(SG_GENERAL, SG_INFO, "Exiting FlightGear with status " << status);
     exit(status);
 }