Static global object don't work well, if the variables are
authorNathan Binkert <binkertn@umich.edu>
Thu, 5 Oct 2006 10:37:43 +0000 (03:37 -0700)
committerNathan Binkert <binkertn@umich.edu>
Thu, 5 Oct 2006 10:37:43 +0000 (03:37 -0700)
accessed during the construction of another static global
object because there are no guarantees on ordering of
construction, so stick the static global into a function
as a static local and return a reference to the variable.
This fixes the exit callback stuff on my Mac.

--HG--
extra : convert_revision : 63a3844d0b5ee18e2011f1bc7ca7bb703284da94

src/sim/main.cc

index 5725897f896a15f79aa4cc56133d1e892304d9f3..728b7b810fc66b83a5bd6ace57d63818433b9d23 100644 (file)
@@ -414,7 +414,12 @@ unserializeAll(const std::string &cpt_dir)
 /**
  * Queue of C++ callbacks to invoke on simulator exit.
  */
-CallbackQueue exitCallbacks;
+CallbackQueue&
+exitCallbacks()
+{
+    static CallbackQueue theQueue;
+    return theQueue;
+}
 
 /**
  * Register an exit callback.
@@ -422,7 +427,7 @@ CallbackQueue exitCallbacks;
 void
 registerExitCallback(Callback *callback)
 {
-    exitCallbacks.add(callback);
+    exitCallbacks().add(callback);
 }
 
 BaseCPU *
@@ -442,8 +447,8 @@ convertToBaseCPUPtr(SimObject *obj)
 void
 doExitCleanup()
 {
-    exitCallbacks.process();
-    exitCallbacks.clear();
+    exitCallbacks().process();
+    exitCallbacks().clear();
 
     cout.flush();