diff options
author | Nathan Binkert <binkertn@umich.edu> | 2006-10-05 03:37:43 -0700 |
---|---|---|
committer | Nathan Binkert <binkertn@umich.edu> | 2006-10-05 03:37:43 -0700 |
commit | 4142f8f7c02ff18cb42a91bb8b9c2e0d847cf505 (patch) | |
tree | 8c72ec8eacf19fae34946932efb0b13a7a3c6db9 | |
parent | 51c8eab7b336a6c83e545b741cb975883fe56440 (diff) | |
download | gem5-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.cc | 13 |
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(); |