diff options
Diffstat (limited to 'lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc')
-rw-r--r-- | lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc | 21 |
1 files changed, 6 insertions, 15 deletions
diff --git a/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc b/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc index a7a47d4a..b431e51e 100644 --- a/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc +++ b/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc @@ -11,9 +11,7 @@ // run-time libraries. //===----------------------------------------------------------------------===// -#include "sanitizer_platform.h" #include "sanitizer_internal_defs.h" -#include "sanitizer_placement_new.h" #include "sanitizer_symbolizer.h" namespace __sanitizer { @@ -22,27 +20,20 @@ Symbolizer *Symbolizer::CreateAndStore(const char *path_to_external) { Symbolizer *platform_symbolizer = PlatformInit(path_to_external); if (!platform_symbolizer) return Disable(); - atomic_store(&symbolizer_, reinterpret_cast<uptr>(platform_symbolizer), - memory_order_release); + symbolizer_ = platform_symbolizer; return platform_symbolizer; } Symbolizer *Symbolizer::Init(const char *path_to_external) { - CHECK_EQ(0, atomic_load(&symbolizer_, memory_order_acquire)); + CHECK_EQ(0, symbolizer_); return CreateAndStore(path_to_external); } Symbolizer *Symbolizer::GetOrInit() { - static StaticSpinMutex init_mu; - - uptr sym = atomic_load(&symbolizer_, memory_order_acquire); - if (!sym) { - SpinMutexLock l(&init_mu); - sym = atomic_load(&symbolizer_, memory_order_relaxed); - if (!sym) return CreateAndStore(0); - } - - return reinterpret_cast<Symbolizer *>(sym); + SpinMutexLock l(&init_mu_); + if (symbolizer_ == 0) + return CreateAndStore(0); + return symbolizer_; } } // namespace __sanitizer |