From a33e156f81401198e079d57e1a9d7ef876729d01 Mon Sep 17 00:00:00 2001 From: Vitaly Buka Date: Fri, 22 Sep 2017 22:36:21 +0000 Subject: [PATCH] [sanitizer] Replace thread id with GetThreadSelf This allows to avoid constructor parameter llvm-svn: 314040 --- compiler-rt/lib/asan/asan_report.cc | 6 +----- .../lib/sanitizer_common/sanitizer_common.h | 2 +- .../sanitizer_common_libcdep.cc | 19 +++++++++---------- 3 files changed, 11 insertions(+), 16 deletions(-) diff --git a/compiler-rt/lib/asan/asan_report.cc b/compiler-rt/lib/asan/asan_report.cc index 9536ead660a5..cda93f3e66ae 100644 --- a/compiler-rt/lib/asan/asan_report.cc +++ b/compiler-rt/lib/asan/asan_report.cc @@ -122,12 +122,8 @@ bool ParseFrameDescription(const char *frame_descr, // immediately after printing error report. class ScopedInErrorReport { public: - static const u32 kUnclaimedTid = 0xfffffe; - static_assert(kUnclaimedTid != kInvalidTid, "Must be different"); - explicit ScopedInErrorReport(bool fatal = false) - : error_report_lock_(GetCurrentTidOrInvalid()), - halt_on_error_(fatal || flags()->halt_on_error) { + : halt_on_error_(fatal || flags()->halt_on_error) { // Make sure the registry and sanitizer report mutexes are locked while // we're printing an error report. // We can lock them only here to avoid self-deadlock in case of diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common.h b/compiler-rt/lib/sanitizer_common/sanitizer_common.h index e2e2224d4f70..4a6b58d39116 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_common.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_common.h @@ -211,7 +211,7 @@ extern StaticSpinMutex CommonSanitizerReportMutex; // Lock sanitizer error reporting and protects against nested errors. class ScopedErrorReportLock { public: - explicit ScopedErrorReportLock(u32 current_tid); + ScopedErrorReportLock(); ~ScopedErrorReportLock(); }; diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common_libcdep.cc b/compiler-rt/lib/sanitizer_common/sanitizer_common_libcdep.cc index ce6bff447da6..b10eaeb96ed5 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_common_libcdep.cc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_common_libcdep.cc @@ -286,21 +286,20 @@ void MaybeStartBackgroudThread() { #endif } -static const u32 kUnclaimedTid = 0xfffffe; -static atomic_uint32_t reporting_thread_tid = {kUnclaimedTid}; +static atomic_uintptr_t reporting_thread = {0}; -ScopedErrorReportLock::ScopedErrorReportLock(u32 current_tid) { +ScopedErrorReportLock::ScopedErrorReportLock() { + uptr current = GetThreadSelf(); for (;;) { - u32 expected_tid = kUnclaimedTid; - if (current_tid == kUnclaimedTid || - atomic_compare_exchange_strong(&reporting_thread_tid, &expected_tid, - current_tid, memory_order_relaxed)) { - // We've claimed reporting_thread_tid_ so proceed. + uptr expected = 0; + if (atomic_compare_exchange_strong(&reporting_thread, &expected, current, + memory_order_relaxed)) { + // We've claimed reporting_thread so proceed. CommonSanitizerReportMutex.Lock(); return; } - if (expected_tid == current_tid) { + if (expected == current) { // This is either asynch signal or nested error during error reporting. // Fail simple to avoid deadlocks in Report(). @@ -320,7 +319,7 @@ ScopedErrorReportLock::ScopedErrorReportLock(u32 current_tid) { ScopedErrorReportLock::~ScopedErrorReportLock() { CommonSanitizerReportMutex.Unlock(); - atomic_store_relaxed(&reporting_thread_tid, kUnclaimedTid); + atomic_store_relaxed(&reporting_thread, 0); } } // namespace __sanitizer