diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2014-07-08 13:28:01 +0000 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2014-07-08 13:28:01 +0000 |
| commit | a480d3013a76d5610b4e5939e27dcbf01bc92b43 (patch) | |
| tree | 83ce5e68259627c34ecd38556ead9c3d711c1604 /compiler-rt/lib/tsan/tests/unit/tsan_sync_test.cc | |
| parent | a4212c244a272b0b6f1153cdc330f1854f20d267 (diff) | |
| download | bcm5719-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.cc | 12 |
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 |

