summaryrefslogtreecommitdiffstats
path: root/compiler-rt/lib/tsan/tests/unit/tsan_sync_test.cc
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2014-07-08 13:28:01 +0000
committerDmitry Vyukov <dvyukov@google.com>2014-07-08 13:28:01 +0000
commita480d3013a76d5610b4e5939e27dcbf01bc92b43 (patch)
tree83ce5e68259627c34ecd38556ead9c3d711c1604 /compiler-rt/lib/tsan/tests/unit/tsan_sync_test.cc
parenta4212c244a272b0b6f1153cdc330f1854f20d267 (diff)
downloadbcm5719-llvm-a480d3013a76d5610b4e5939e27dcbf01bc92b43.tar.gz
bcm5719-llvm-a480d3013a76d5610b4e5939e27dcbf01bc92b43.zip
tsan: fix a bug in metamap
The bug happens in the following case: Mutex is located at heap block beginning, when we call MutexDestroy, s->next is set to 0, so free can't find the MBlock related to the block. llvm-svn: 212531
Diffstat (limited to 'compiler-rt/lib/tsan/tests/unit/tsan_sync_test.cc')
-rw-r--r--compiler-rt/lib/tsan/tests/unit/tsan_sync_test.cc12
1 files changed, 12 insertions, 0 deletions
diff --git a/compiler-rt/lib/tsan/tests/unit/tsan_sync_test.cc b/compiler-rt/lib/tsan/tests/unit/tsan_sync_test.cc
index 664ce7f0dbc..6f36c64a556 100644
--- a/compiler-rt/lib/tsan/tests/unit/tsan_sync_test.cc
+++ b/compiler-rt/lib/tsan/tests/unit/tsan_sync_test.cc
@@ -108,4 +108,16 @@ TEST(MetaMap, MoveMemory) {
m->FreeRange(thr, 0, (uptr)&block2[0], 4 * sizeof(u64));
}
+TEST(MetaMap, ResetSync) {
+ ThreadState *thr = cur_thread();
+ MetaMap *m = &ctx->metamap;
+ u64 block[1] = {}; // fake malloc block
+ m->AllocBlock(thr, 0, (uptr)&block[0], 1 * sizeof(u64));
+ SyncVar *s = m->GetOrCreateAndLock(thr, 0, (uptr)&block[0], true);
+ s->Reset();
+ s->mtx.Unlock();
+ uptr sz = m->FreeBlock(thr, 0, (uptr)&block[0]);
+ EXPECT_EQ(sz, 1 * sizeof(u64));
+}
+
} // namespace __tsan
OpenPOWER on IntegriCloud