]> git.mxchange.org Git - simgear.git/blobdiff - simgear/structure/commands.cxx
Merge branch 'topic/gcintersect' into next
[simgear.git] / simgear / structure / commands.cxx
index 2e2c59215494430a72498266e4617960d4f0bab9..16706d96ecde648e8095fdb78cd2674ccbecd086 100644 (file)
@@ -4,8 +4,12 @@
 //
 // $Id$
 
+#include <memory>
 #include <simgear/props/props_io.hxx>
 
+#include <OpenThreads/Mutex>
+#include <OpenThreads/ScopedLock>
+
 #include "commands.hxx"
 
 
@@ -25,6 +29,23 @@ SGCommandMgr::~SGCommandMgr ()
   // no-op
 }
 
+OpenThreads::Mutex SGCommandMgr::_instanceMutex;
+
+SGCommandMgr*
+SGCommandMgr::instance()
+{
+  static std::auto_ptr<SGCommandMgr> mgr;
+  if (mgr.get())
+    return mgr.get();
+
+  OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_instanceMutex);
+  if (mgr.get())
+    return mgr.get();
+
+  mgr = std::auto_ptr<SGCommandMgr>(new SGCommandMgr);
+  return mgr.get();
+}
+
 void
 SGCommandMgr::addCommand (const string &name, command_t command)
 {