]> git.mxchange.org Git - simgear.git/commitdiff
Allow Command-manager singleton to be deleted.
authorJames Turner <zakalawe@mac.com>
Sat, 23 Nov 2013 20:00:23 +0000 (20:00 +0000)
committerJames Turner <zakalawe@mac.com>
Sat, 23 Nov 2013 20:00:23 +0000 (20:00 +0000)
(Shutdown can delete commands in an orderly way)

simgear/structure/commands.cxx
simgear/structure/commands.hxx

index 91d5928e139a882044c13273337e4e36a0d362f3..9a41093653d25a4346c3b439f40e538aae11e1fb 100644 (file)
@@ -9,6 +9,8 @@
 #endif
 
 #include <memory>
+#include <cassert>
+
 #include <simgear/props/props_io.hxx>
 
 #include "commands.hxx"
 // Implementation of SGCommandMgr class.
 ////////////////////////////////////////////////////////////////////////
 
+static SGCommandMgr* static_instance = NULL;
 
 SGCommandMgr::SGCommandMgr ()
 {
-  // no-op
+    assert(static_instance == NULL);
+    static_instance = this;
 }
 
 SGCommandMgr::~SGCommandMgr ()
 {
-  // no-op
+    assert(static_instance == this);
+    static_instance = NULL;
 }
 
-SGMutex SGCommandMgr::_instanceMutex;
-
 SGCommandMgr*
 SGCommandMgr::instance()
 {
-  static std::auto_ptr<SGCommandMgr> mgr;
-  if (mgr.get())
-    return mgr.get();
-
-  SGGuard<SGMutex> lock(_instanceMutex);
-  if (mgr.get())
-    return mgr.get();
-
-  mgr = std::auto_ptr<SGCommandMgr>(new SGCommandMgr);
-  return mgr.get();
+    return static_instance;
 }
 
 void
index c9ad2370f9cd6e27e631e1f6e060d139d7ac5495..2ffabf0ac12370b535eb9c65f3675fe24b66bdad 100644 (file)
@@ -16,7 +16,6 @@
 #include <string>
 #include <map>
 
-#include <simgear/threads/SGThread.hxx>
 #include <simgear/math/sg_types.hxx>
 
 // forward decls
@@ -87,16 +86,16 @@ private:
    }
    
 public:
-
+   /**
+    * Default constructor (sets instance to created item)
+    */
+   SGCommandMgr ();
 
   /**
-   * Destructor.
+   * Destructor. (sets instance to NULL)
    */
   virtual ~SGCommandMgr ();
 
-  /**
-   * Implement the classical singleton.
-   */
   static SGCommandMgr* instance();
 
   /**
@@ -155,10 +154,7 @@ public:
    */
   bool removeCommand(const std::string& name);
 protected:
-  /**
-   * Default constructor.
-   */
-  SGCommandMgr ();
+
 
 
 private:
@@ -166,8 +162,6 @@ private:
   typedef std::map<std::string,Command*> command_map;
   command_map _commands;
 
-  static SGMutex _instanceMutex;
-
 };
 
 #endif // __COMMANDS_HXX