mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-19 03:30:27 +08:00
sanitizer_deadlock_detector.h: Cherry pick upstream r224518 and r224519.
* sanitizer_common/sanitizer_deadlock_detector.h: Cherry pick upstream r224518 and r224519. * tsan/tsan_rtl_thread.cc: Cherry pick upstream r224702 and r224834. From-SVN: r219545
This commit is contained in:
parent
41197ad499
commit
b6a8baccac
@ -1,3 +1,10 @@
|
||||
2015-01-13 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* sanitizer_common/sanitizer_deadlock_detector.h: Cherry pick
|
||||
upstream r224518 and r224519.
|
||||
* tsan/tsan_rtl_thread.cc: Cherry pick upstream r224702 and
|
||||
r224834.
|
||||
|
||||
2014-12-16 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* sanitizer_common/sanitizer_symbolizer_libbacktrace.cc,
|
||||
|
@ -48,6 +48,8 @@ class DeadlockDetectorTLS {
|
||||
if (epoch_ == current_epoch) return;
|
||||
bv_.clear();
|
||||
epoch_ = current_epoch;
|
||||
n_recursive_locks = 0;
|
||||
n_all_locks_ = 0;
|
||||
}
|
||||
|
||||
uptr getEpoch() const { return epoch_; }
|
||||
@ -81,7 +83,8 @@ class DeadlockDetectorTLS {
|
||||
}
|
||||
}
|
||||
// Printf("remLock: %zx %zx\n", lock_id, epoch_);
|
||||
CHECK(bv_.clearBit(lock_id));
|
||||
if (!bv_.clearBit(lock_id))
|
||||
return; // probably addLock happened before flush
|
||||
if (n_all_locks_) {
|
||||
for (sptr i = n_all_locks_ - 1; i >= 0; i--) {
|
||||
if (all_locks_with_contexts_[i].lock == static_cast<u32>(lock_id)) {
|
||||
@ -173,6 +176,7 @@ class DeadlockDetector {
|
||||
recycled_nodes_.clear();
|
||||
available_nodes_.setAll();
|
||||
g_.clear();
|
||||
n_edges_ = 0;
|
||||
return getAvailableNode(data);
|
||||
}
|
||||
|
||||
|
@ -109,12 +109,13 @@ void ThreadContext::OnStarted(void *arg) {
|
||||
thr->dd_pt = ctx->dd->CreatePhysicalThread();
|
||||
thr->dd_lt = ctx->dd->CreateLogicalThread(unique_id);
|
||||
}
|
||||
thr->fast_state.SetHistorySize(flags()->history_size);
|
||||
// Commit switch to the new part of the trace.
|
||||
// TraceAddEvent will reset stack0/mset0 in the new part for us.
|
||||
TraceAddEvent(thr, thr->fast_state, EventTypeMop, 0);
|
||||
|
||||
thr->fast_synch_epoch = epoch0;
|
||||
AcquireImpl(thr, 0, &sync);
|
||||
thr->fast_state.SetHistorySize(flags()->history_size);
|
||||
const uptr trace = (epoch0 / kTracePartSize) % TraceParts();
|
||||
Trace *thr_trace = ThreadTrace(thr->tid);
|
||||
thr_trace->headers[trace].epoch0 = epoch0;
|
||||
StatInc(thr, StatSyncAcquire);
|
||||
sync.Reset(&thr->clock_cache);
|
||||
DPrintf("#%d: ThreadStart epoch=%zu stk_addr=%zx stk_size=%zx "
|
||||
|
Loading…
x
Reference in New Issue
Block a user