summaryrefslogtreecommitdiff
path: root/lib/tsan/rtl/tsan_sync.cc
diff options
context:
space:
mode:
authorAlexey Samsonov <vonosmas@gmail.com>2014-07-08 20:17:19 +0000
committerAlexey Samsonov <vonosmas@gmail.com>2014-07-08 20:17:19 +0000
commita23f33bb20043f95685f3fc8c0cfc23f499f8faa (patch)
treec4f0438d1d347fc5c4e257587e545338308c42c0 /lib/tsan/rtl/tsan_sync.cc
parent75e8a9117af00bc1ffe2a64c1a4232554fc506f4 (diff)
[TSan] Revert r212531 and r212532.
They cause "check-tsan" command to hang. Details in r212532 review thread. git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@212562 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/tsan/rtl/tsan_sync.cc')
-rw-r--r--lib/tsan/rtl/tsan_sync.cc7
1 files changed, 3 insertions, 4 deletions
diff --git a/lib/tsan/rtl/tsan_sync.cc b/lib/tsan/rtl/tsan_sync.cc
index 15392c957..8c48cadfb 100644
--- a/lib/tsan/rtl/tsan_sync.cc
+++ b/lib/tsan/rtl/tsan_sync.cc
@@ -46,6 +46,7 @@ void SyncVar::Reset() {
is_recursive = 0;
is_broken = 0;
is_linker_init = 0;
+ next = 0;
clock.Zero();
read_clock.Reset();
@@ -133,7 +134,7 @@ SyncVar* MetaMap::GetAndLock(ThreadState *thr, uptr pc,
u32 myidx = 0;
SyncVar *mys = 0;
for (;;) {
- u32 idx = idx0;
+ u32 idx = *meta;
for (;;) {
if (idx == 0)
break;
@@ -156,10 +157,8 @@ SyncVar* MetaMap::GetAndLock(ThreadState *thr, uptr pc,
}
if (!create)
return 0;
- if (*meta != idx0) {
- idx0 = *meta;
+ if (*meta != idx0)
continue;
- }
if (myidx == 0) {
const u64 uid = atomic_fetch_add(&uid_gen_, 1, memory_order_relaxed);