summaryrefslogtreecommitdiff
path: root/lib/sanitizer_common/sanitizer_deadlock_detector.h
diff options
context:
space:
mode:
authorKostya Serebryany <kcc@google.com>2014-02-17 14:57:49 +0000
committerKostya Serebryany <kcc@google.com>2014-02-17 14:57:49 +0000
commitb3dd6edc18de2e0fc6fa1e706f811e15f1bab8a7 (patch)
tree4bfa2aa476aed0b76ee0d8b7f4c901d4558d91c0 /lib/sanitizer_common/sanitizer_deadlock_detector.h
parent060c87a137397d3e420a9a11d5b903e164efb353 (diff)
[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.h11
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()); }