diff options
author | Alexey Samsonov <samsonov@google.com> | 2013-10-30 17:05:37 +0000 |
---|---|---|
committer | Alexey Samsonov <samsonov@google.com> | 2013-10-30 17:05:37 +0000 |
commit | e00495aa0f3b114c7b764769d9450e5d2efb8e64 (patch) | |
tree | bbe0117940e41d2ce3428787dadee3d0f0db375f /lib/sanitizer_common/sanitizer_symbolizer.cc | |
parent | 1bb2229028dd78280d24c26b9efbe8476d966e05 (diff) |
[Sanitizer] Use SpinMutex for Symbolizer initialization (per dvyukov's suggestion)
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@193697 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/sanitizer_common/sanitizer_symbolizer.cc')
-rw-r--r-- | lib/sanitizer_common/sanitizer_symbolizer.cc | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/lib/sanitizer_common/sanitizer_symbolizer.cc b/lib/sanitizer_common/sanitizer_symbolizer.cc index ea74420f3..6bec459b7 100644 --- a/lib/sanitizer_common/sanitizer_symbolizer.cc +++ b/lib/sanitizer_common/sanitizer_symbolizer.cc @@ -18,26 +18,26 @@ namespace __sanitizer { -atomic_uintptr_t Symbolizer::symbolizer_; +Symbolizer *Symbolizer::symbolizer_; +StaticSpinMutex Symbolizer::init_mu_; LowLevelAllocator Symbolizer::symbolizer_allocator_; Symbolizer *Symbolizer::GetOrNull() { - return reinterpret_cast<Symbolizer *>( - atomic_load(&symbolizer_, memory_order_acquire)); + SpinMutexLock l(&init_mu_); + return symbolizer_; } Symbolizer *Symbolizer::Get() { - Symbolizer *sym = GetOrNull(); - CHECK(sym); - return sym; + SpinMutexLock l(&init_mu_); + RAW_CHECK_MSG(symbolizer_ != 0, "Using uninitialized symbolizer!"); + return symbolizer_; } Symbolizer *Symbolizer::Disable() { - CHECK_EQ(0, atomic_load(&symbolizer_, memory_order_acquire)); - Symbolizer *dummy_sym = new(symbolizer_allocator_) Symbolizer; - atomic_store(&symbolizer_, reinterpret_cast<uptr>(dummy_sym), - memory_order_release); - return dummy_sym; + CHECK_EQ(0, symbolizer_); + // Initialize a dummy symbolizer. + symbolizer_ = new(symbolizer_allocator_) Symbolizer; + return symbolizer_; } } // namespace __sanitizer |