diff options
author | Owen Anderson <resistor@mac.com> | 2009-06-23 17:33:37 +0000 |
---|---|---|
committer | Owen Anderson <resistor@mac.com> | 2009-06-23 17:33:37 +0000 |
commit | 4ed41c8be8f5b88158e0f2c473f5e1de2d0ea753 (patch) | |
tree | 8a1a879aa7f68e13896542f978f664a2a425c46b /llvm/lib | |
parent | a1ae30140b9d275b4dbf0b7d58110a9ded82a322 (diff) | |
download | bcm5719-llvm-4ed41c8be8f5b88158e0f2c473f5e1de2d0ea753.tar.gz bcm5719-llvm-4ed41c8be8f5b88158e0f2c473f5e1de2d0ea753.zip |
Make the lazy initialization of DefaultTimerGroup threadsafe.
llvm-svn: 73963
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Support/Timer.cpp | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/llvm/lib/Support/Timer.cpp b/llvm/lib/Support/Timer.cpp index 3c8879bd06e..bcb27a4ab4f 100644 --- a/llvm/lib/Support/Timer.cpp +++ b/llvm/lib/Support/Timer.cpp @@ -52,8 +52,20 @@ namespace { static TimerGroup *DefaultTimerGroup = 0; static TimerGroup *getDefaultTimerGroup() { - if (DefaultTimerGroup) return DefaultTimerGroup; - return DefaultTimerGroup = new TimerGroup("Miscellaneous Ungrouped Timers"); + TimerGroup* tmp = DefaultTimerGroup; + sys::MemoryFence(); + if (!tmp) { + llvm_acquire_global_lock(); + tmp = DefaultTimerGroup; + if (!tmp) { + tmp = new TimerGroup("Miscellaneous Ungrouped Timers"); + sys::MemoryFence(); + DefaultTimerGroup = tmp; + } + llvm_release_global_lock(); + } + + return tmp; } Timer::Timer(const std::string &N) @@ -377,11 +389,5 @@ void TimerGroup::removeTimer() { if (OutStream != cerr.stream() && OutStream != cout.stream()) delete OutStream; // Close the file... } - - // Delete default timer group! - if (NumTimers == 0 && this == DefaultTimerGroup) { - delete DefaultTimerGroup; - DefaultTimerGroup = 0; - } } |