forked from OSchip/llvm-project
[TSan] Revert r212531 and r212532.
They cause "check-tsan" command to hang. Details in r212532 review thread. llvm-svn: 212562
This commit is contained in:
parent
1ba38f8879
commit
047ea1717b
|
@ -46,6 +46,7 @@ void SyncVar::Reset() {
|
||||||
is_recursive = 0;
|
is_recursive = 0;
|
||||||
is_broken = 0;
|
is_broken = 0;
|
||||||
is_linker_init = 0;
|
is_linker_init = 0;
|
||||||
|
next = 0;
|
||||||
|
|
||||||
clock.Zero();
|
clock.Zero();
|
||||||
read_clock.Reset();
|
read_clock.Reset();
|
||||||
|
@ -133,7 +134,7 @@ SyncVar* MetaMap::GetAndLock(ThreadState *thr, uptr pc,
|
||||||
u32 myidx = 0;
|
u32 myidx = 0;
|
||||||
SyncVar *mys = 0;
|
SyncVar *mys = 0;
|
||||||
for (;;) {
|
for (;;) {
|
||||||
u32 idx = idx0;
|
u32 idx = *meta;
|
||||||
for (;;) {
|
for (;;) {
|
||||||
if (idx == 0)
|
if (idx == 0)
|
||||||
break;
|
break;
|
||||||
|
@ -156,10 +157,8 @@ SyncVar* MetaMap::GetAndLock(ThreadState *thr, uptr pc,
|
||||||
}
|
}
|
||||||
if (!create)
|
if (!create)
|
||||||
return 0;
|
return 0;
|
||||||
if (*meta != idx0) {
|
if (*meta != idx0)
|
||||||
idx0 = *meta;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
|
|
||||||
if (myidx == 0) {
|
if (myidx == 0) {
|
||||||
const u64 uid = atomic_fetch_add(&uid_gen_, 1, memory_order_relaxed);
|
const u64 uid = atomic_fetch_add(&uid_gen_, 1, memory_order_relaxed);
|
||||||
|
|
|
@ -108,16 +108,4 @@ TEST(MetaMap, MoveMemory) {
|
||||||
m->FreeRange(thr, 0, (uptr)&block2[0], 4 * sizeof(u64));
|
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
|
} // namespace __tsan
|
||||||
|
|
Loading…
Reference in New Issue