summaryrefslogtreecommitdiff
path: root/lib/Support
diff options
context:
space:
mode:
authorZachary Turner <zturner@google.com>2014-06-16 22:39:38 +0000
committerZachary Turner <zturner@google.com>2014-06-16 22:39:38 +0000
commit9be5c8ca6bb5c91cbc23e24d8703a8e140d68397 (patch)
treef8a2ebc22725a545a708fee4e1d9c9991a1234aa /lib/Support
parent8b3a8d6343ae078a881abac4b5be067e74e5739a (diff)
downloadllvm-9be5c8ca6bb5c91cbc23e24d8703a8e140d68397.tar.gz
llvm-9be5c8ca6bb5c91cbc23e24d8703a8e140d68397.tar.bz2
llvm-9be5c8ca6bb5c91cbc23e24d8703a8e140d68397.tar.xz
Users of the llvm global mutex must now acquire it manually.
This allows the mutex to be acquired in a guarded, RAII fashion. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@211066 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Support')
-rw-r--r--lib/Support/ManagedStatic.cpp5
-rw-r--r--lib/Support/Threading.cpp15
-rw-r--r--lib/Support/Timer.cpp5
3 files changed, 8 insertions, 17 deletions
diff --git a/lib/Support/ManagedStatic.cpp b/lib/Support/ManagedStatic.cpp
index 6a1c2a545a..6f5cf6bcb1 100644
--- a/lib/Support/ManagedStatic.cpp
+++ b/lib/Support/ManagedStatic.cpp
@@ -14,6 +14,7 @@
#include "llvm/Support/ManagedStatic.h"
#include "llvm/Config/config.h"
#include "llvm/Support/Atomic.h"
+#include "llvm/Support/MutexGuard.h"
#include <cassert>
using namespace llvm;
@@ -23,7 +24,7 @@ void ManagedStaticBase::RegisterManagedStatic(void *(*Creator)(),
void (*Deleter)(void*)) const {
assert(Creator);
if (llvm_is_multithreaded()) {
- llvm_acquire_global_lock();
+ llvm::MutexGuard Lock(llvm::llvm_get_global_lock());
if (!Ptr) {
void* tmp = Creator();
@@ -43,8 +44,6 @@ void ManagedStaticBase::RegisterManagedStatic(void *(*Creator)(),
Next = StaticList;
StaticList = this;
}
-
- llvm_release_global_lock();
} else {
assert(!Ptr && !DeleterFn && !Next &&
"Partially initialized ManagedStatic!?");
diff --git a/lib/Support/Threading.cpp b/lib/Support/Threading.cpp
index 1acfa79b11..33943efcd6 100644
--- a/lib/Support/Threading.cpp
+++ b/lib/Support/Threading.cpp
@@ -21,13 +21,15 @@ using namespace llvm;
static bool multithreaded_mode = false;
-static sys::Mutex* global_lock = nullptr;
+sys::Mutex& llvm::llvm_get_global_lock() {
+ static sys::Mutex global_lock;
+ return global_lock;
+}
bool llvm::llvm_start_multithreaded() {
#if LLVM_ENABLE_THREADS != 0
assert(!multithreaded_mode && "Already multithreaded!");
multithreaded_mode = true;
- global_lock = new sys::Mutex(true);
// We fence here to ensure that all initialization is complete BEFORE we
// return from llvm_start_multithreaded().
@@ -47,7 +49,6 @@ void llvm::llvm_stop_multithreaded() {
sys::MemoryFence();
multithreaded_mode = false;
- delete global_lock;
#endif
}
@@ -55,14 +56,6 @@ bool llvm::llvm_is_multithreaded() {
return multithreaded_mode;
}
-void llvm::llvm_acquire_global_lock() {
- if (multithreaded_mode) global_lock->acquire();
-}
-
-void llvm::llvm_release_global_lock() {
- if (multithreaded_mode) global_lock->release();
-}
-
#if LLVM_ENABLE_THREADS != 0 && defined(HAVE_PTHREAD_H)
#include <pthread.h>
diff --git a/lib/Support/Timer.cpp b/lib/Support/Timer.cpp
index 61465ae5e8..417ac8d6bb 100644
--- a/lib/Support/Timer.cpp
+++ b/lib/Support/Timer.cpp
@@ -18,7 +18,7 @@
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/Format.h"
#include "llvm/Support/ManagedStatic.h"
-#include "llvm/Support/Mutex.h"
+#include "llvm/support/MutexGuard.h"
#include "llvm/Support/Process.h"
#include "llvm/Support/raw_ostream.h"
using namespace llvm;
@@ -84,14 +84,13 @@ static TimerGroup *getDefaultTimerGroup() {
sys::MemoryFence();
if (tmp) return tmp;
- llvm_acquire_global_lock();
+ llvm::MutexGuard Lock(llvm::llvm_get_global_lock());
tmp = DefaultTimerGroup;
if (!tmp) {
tmp = new TimerGroup("Miscellaneous Ungrouped Timers");
sys::MemoryFence();
DefaultTimerGroup = tmp;
}
- llvm_release_global_lock();
return tmp;
}