summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Binkert <binkertn@umich.edu>2006-10-05 03:37:43 -0700
committerNathan Binkert <binkertn@umich.edu>2006-10-05 03:37:43 -0700
commit4142f8f7c02ff18cb42a91bb8b9c2e0d847cf505 (patch)
tree8c72ec8eacf19fae34946932efb0b13a7a3c6db9
parent51c8eab7b336a6c83e545b741cb975883fe56440 (diff)
downloadgem5-4142f8f7c02ff18cb42a91bb8b9c2e0d847cf505.tar.xz
Static global object don't work well, if the variables are
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
-rw-r--r--src/sim/main.cc13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/sim/main.cc b/src/sim/main.cc
index 5725897f8..728b7b810 100644
--- a/src/sim/main.cc
+++ b/src/sim/main.cc
@@ -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();