diff options
author | Kostya Serebryany <kcc@google.com> | 2014-03-17 14:56:04 +0000 |
---|---|---|
committer | Kostya Serebryany <kcc@google.com> | 2014-03-17 14:56:04 +0000 |
commit | 73557dda0918b7a3e4184a6431118c64f04aefff (patch) | |
tree | 7c95d9149ac14634ff769475ae30a633a7b1538e | |
parent | 6e756101ca145d7b0a16f2a9eeadc3de38622120 (diff) |
[sanitizer] reverse the order of the stack traces printed for every pair of locks in the deadlock report (first print the 'from' node, then print the 'to' node of the deadlock graph)
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@204043 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/sanitizer_common/sanitizer_deadlock_detector.h | 4 | ||||
-rw-r--r-- | test/tsan/deadlock_detector_stress_test.cc | 8 |
2 files changed, 6 insertions, 6 deletions
diff --git a/lib/sanitizer_common/sanitizer_deadlock_detector.h b/lib/sanitizer_common/sanitizer_deadlock_detector.h index a75612a03..637153c90 100644 --- a/lib/sanitizer_common/sanitizer_deadlock_detector.h +++ b/lib/sanitizer_common/sanitizer_deadlock_detector.h @@ -231,8 +231,8 @@ class DeadlockDetector { added_edges, ARRAY_SIZE(added_edges)); for (uptr i = 0; i < n_added_edges; i++) { if (n_edges_ < ARRAY_SIZE(edges_)) - edges_[n_edges_++] = Edge((u16)added_edges[i], (u16)cur_idx, stk, - dtls->findLockContext(added_edges[i])); + edges_[n_edges_++] = Edge((u16)added_edges[i], (u16)cur_idx, + dtls->findLockContext(added_edges[i]), stk); // Printf("Edge [%zd]: %u %zd=>%zd\n", i, stk, added_edges[i], cur_idx); } return n_added_edges; diff --git a/test/tsan/deadlock_detector_stress_test.cc b/test/tsan/deadlock_detector_stress_test.cc index a85c2e891..19a9bb920 100644 --- a/test/tsan/deadlock_detector_stress_test.cc +++ b/test/tsan/deadlock_detector_stress_test.cc @@ -417,13 +417,13 @@ class LockTest { fprintf(stderr, "Starting Test16: detailed output test with two locks\n"); // CHECK: Starting Test16 // CHECK: WARNING: ThreadSanitizer: lock-order-inversion - // CHECK: LockTest::Acquire1 - // CHECK-NEXT: LockTest::Acquire_0_then_1 // CHECK: LockTest::Acquire0 // CHECK-NEXT: LockTest::Acquire_0_then_1 - // CHECK: LockTest::Acquire0 - // CHECK-NEXT: LockTest::Acquire_1_then_0 // CHECK: LockTest::Acquire1 + // CHECK-NEXT: LockTest::Acquire_0_then_1 + // CHECK: LockTest::Acquire1 + // CHECK-NEXT: LockTest::Acquire_1_then_0 + // CHECK: LockTest::Acquire0 // CHECK-NEXT: LockTest::Acquire_1_then_0 Init(5); Acquire_0_then_1(); |