From e00495aa0f3b114c7b764769d9450e5d2efb8e64 Mon Sep 17 00:00:00 2001 From: Alexey Samsonov Date: Wed, 30 Oct 2013 17:05:37 +0000 Subject: [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 --- lib/sanitizer_common/sanitizer_symbolizer.cc | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) (limited to 'lib/sanitizer_common/sanitizer_symbolizer.cc') 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( - 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(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 -- cgit v1.2.3