diff options
author | Vitaly Buka <vitalybuka@google.com> | 2017-09-22 22:36:11 +0000 |
---|---|---|
committer | Vitaly Buka <vitalybuka@google.com> | 2017-09-22 22:36:11 +0000 |
commit | 9b376627e371c9d879a8ba4d38aaa0638c9f0d58 (patch) | |
tree | 57077448aa46d6b988fe60f5008257f7f30e7241 /lib/sanitizer_common/sanitizer_common.cc | |
parent | feeabcf3b98ef72cdbd24c5b98db1e41ec53e219 (diff) |
[sanitizer] Move ScopedErrorReportLock into libcdep version
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@314039 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/sanitizer_common/sanitizer_common.cc')
-rw-r--r-- | lib/sanitizer_common/sanitizer_common.cc | 37 |
1 files changed, 0 insertions, 37 deletions
diff --git a/lib/sanitizer_common/sanitizer_common.cc b/lib/sanitizer_common/sanitizer_common.cc index e5ae1a9f1..970b11c00 100644 --- a/lib/sanitizer_common/sanitizer_common.cc +++ b/lib/sanitizer_common/sanitizer_common.cc @@ -348,43 +348,6 @@ static int InstallMallocFreeHooks(void (*malloc_hook)(const void *, uptr), return 0; } -static const u32 kUnclaimedTid = 0xfffffe; -static atomic_uint32_t reporting_thread_tid = {kUnclaimedTid}; - -ScopedErrorReportLock::ScopedErrorReportLock(u32 current_tid) { - 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. - CommonSanitizerReportMutex.Lock(); - return; - } - - if (expected_tid == current_tid) { - // This is either asynch signal or nested error during error reporting. - // Fail simple to avoid deadlocks in Report(). - - // Can't use Report() here because of potential deadlocks in nested - // signal handlers. - CatastrophicErrorWrite(SanitizerToolName, - internal_strlen(SanitizerToolName)); - static const char msg[] = ": nested bug in the same thread, aborting.\n"; - CatastrophicErrorWrite(msg, sizeof(msg) - 1); - - internal__exit(common_flags()->exitcode); - } - - internal_sched_yield(); - } -} - -ScopedErrorReportLock::~ScopedErrorReportLock() { - CommonSanitizerReportMutex.Unlock(); - atomic_store_relaxed(&reporting_thread_tid, kUnclaimedTid); -} - } // namespace __sanitizer using namespace __sanitizer; // NOLINT |