summaryrefslogtreecommitdiff
path: root/lib/tsan/tests
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2014-07-08 20:37:16 +0000
committerDmitry Vyukov <dvyukov@google.com>2014-07-08 20:37:16 +0000
commitc212f82219e7463adf999a1688876fb7ec416ad1 (patch)
treefd4f3e8122a203f05d7887afe481cd980325b81e /lib/tsan/tests
parenta23f33bb20043f95685f3fc8c0cfc23f499f8faa (diff)
tsan: reapply 212531 and 212532 with a fix
don't reset s->addr as well git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@212565 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/tsan/tests')
-rw-r--r--lib/tsan/tests/unit/tsan_sync_test.cc12
1 files changed, 12 insertions, 0 deletions
diff --git a/lib/tsan/tests/unit/tsan_sync_test.cc b/lib/tsan/tests/unit/tsan_sync_test.cc
index 664ce7f0d..6f36c64a5 100644
--- a/lib/tsan/tests/unit/tsan_sync_test.cc
+++ b/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