+
+ _inited = true;
+}
+
+void FGNasalSys::shutdown()
+{
+ if (!_inited) {
+ return;
+ }
+
+ shutdownNasalPositioned();
+
+ map<int, FGNasalListener *>::iterator it, end = _listener.end();
+ for(it = _listener.begin(); it != end; ++it)
+ delete it->second;
+ _listener.clear();
+
+ NasalCommandDict::iterator j = _commands.begin();
+ for (; j != _commands.end(); ++j) {
+ globals->get_commands()->removeCommand(j->first);
+ }
+ _commands.clear();
+
+ std::vector<FGNasalModuleListener*>::iterator k = _moduleListeners.begin();
+ for(; k!= _moduleListeners.end(); ++k)
+ delete *k;
+ _moduleListeners.clear();
+
+ naClearSaved();
+
+ _string = naNil(); // will be freed by _context
+ naFreeContext(_context);
+
+ //setWatchedRef(_globals);
+
+ // remove the recursive reference in globals
+ hashset(_globals, "globals", naNil());
+ _globals = naNil();
+
+ naGC();
+ _inited = false;