diff options
author | Kostya Serebryany <kcc@google.com> | 2014-02-17 14:57:49 +0000 |
---|---|---|
committer | Kostya Serebryany <kcc@google.com> | 2014-02-17 14:57:49 +0000 |
commit | b3dd6edc18de2e0fc6fa1e706f811e15f1bab8a7 (patch) | |
tree | 4bfa2aa476aed0b76ee0d8b7f4c901d4558d91c0 /lib/sanitizer_common/sanitizer_deadlock_detector.h | |
parent | 060c87a137397d3e420a9a11d5b903e164efb353 (diff) | |
download | compiler-rt-b3dd6edc18de2e0fc6fa1e706f811e15f1bab8a7.tar.gz |
[sanitizer] add tests for DeadlockDetector, minor fix in onLock
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@201514 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/sanitizer_common/sanitizer_deadlock_detector.h')
-rw-r--r-- | lib/sanitizer_common/sanitizer_deadlock_detector.h | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/lib/sanitizer_common/sanitizer_deadlock_detector.h b/lib/sanitizer_common/sanitizer_deadlock_detector.h index d0ff29de4..8391442da 100644 --- a/lib/sanitizer_common/sanitizer_deadlock_detector.h +++ b/lib/sanitizer_common/sanitizer_deadlock_detector.h @@ -36,6 +36,7 @@ class DeadlockDetectorTLS { } void addLock(uptr lock_id, uptr current_epoch) { + // Printf("addLock: %zx %zx\n", lock_id, current_epoch); if (current_epoch != epoch_) { bv_.clear(); epoch_ = current_epoch; @@ -44,6 +45,7 @@ class DeadlockDetectorTLS { } void removeLock(uptr lock_id, uptr current_epoch) { + // Printf("remLock: %zx %zx\n", lock_id, current_epoch); if (current_epoch != epoch_) { bv_.clear(); epoch_ = current_epoch; @@ -117,8 +119,8 @@ class DeadlockDetector { bool onLock(DeadlockDetectorTLS<BV> *dtls, uptr cur_node) { uptr cur_idx = nodeToIndex(cur_node); bool is_reachable = g_.isReachable(cur_idx, dtls->getLocks()); - dtls->addLock(cur_idx, current_epoch_); g_.addEdges(dtls->getLocks(), cur_idx); + dtls->addLock(cur_idx, current_epoch_); return is_reachable; } @@ -129,6 +131,13 @@ class DeadlockDetector { uptr testOnlyGetEpoch() const { return current_epoch_; } + void Print() { + for (uptr from = 0; from < size(); from++) + for (uptr to = 0; to < size(); to++) + if (g_.hasEdge(from, to)) + Printf(" %zx => %zx\n", from, to); + } + private: void check_idx(uptr idx) const { CHECK_LT(idx, size()); } |