<div dir="ltr">I've reverted this (and r212531) in r212562. "check-tsan" command hanged in the following test:<div><div><br></div><div>#0  0x00007fcc4406b148 in pthread_join (threadid=140514703693568, thread_return=0x0) at pthread_join.c:89</div>
<div>#1  0x00007fcc444eec1e in __interceptor_pthread_join (th=0x7fcc20ffd700, ret=0x0) at llvm/projects/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc:896</div><div>#2  0x00007fcc445472e6 in LockTest::RunThreads (this=0x7fff7b7708b0, f1=(void (LockTest::*)(LockTest * const)) 0x7fcc44548750 <LockTest::CreateAndDestroyLocksLoop()>, </div>
<div>    f2=(void (LockTest::*)(LockTest * const)) 0x7fcc44548750 <LockTest::CreateAndDestroyLocksLoop()>, f3=(void (LockTest::*)(LockTest * const)) 0x7fcc44548750 <LockTest::CreateAndDestroyLocksLoop()>, </div>
<div>    f4=(void (LockTest::*)(LockTest * const)) 0x7fcc44548750 <LockTest::CreateAndDestroyLocksLoop()>) at llvm/projects/compiler-rt/test/tsan/deadlock_detector_stress_test.cc:563</div><div>#3  0x00007fcc4454661c in LockTest::Test14 (this=0x7fff7b7708b0) at llvm/projects/compiler-rt/test/tsan/deadlock_detector_stress_test.cc:414</div>
</div><div><br></div><div><br></div><div>with the following stack trace:</div><div><br></div><div><div>#0  __tsan::MetaMap::GetAndLock (this=0x7fcc4477ec88 <__tsan::ctx_placeholder+8>, thr=thr@entry=0x7fcc20f94840, pc=pc@entry=140515296005860, addr=addr@entry=140514703260608, write_lock=write_lock@entry=true, </div>
<div>    create=create@entry=true) at llvm/projects/compiler-rt/lib/tsan/rtl/tsan_sync.cc:155</div><div>#1  0x00007fcc4452ff8f in __tsan::MetaMap::GetOrCreateAndLock (this=<optimized out>, thr=thr@entry=0x7fcc20f94840, pc=pc@entry=140515296005860, addr=addr@entry=140514703260608, write_lock=write_lock@entry=true)</div>
<div>    at llvm/projects/compiler-rt/lib/tsan/rtl/tsan_sync.cc:122</div><div>#2  0x00007fcc44527217 in __tsan::MutexCreate (thr=0x7fcc20f94840, pc=pc@entry=140515296005860, addr=addr@entry=140514703260608, rw=rw@entry=false, recursive=<optimized out>, linker_init=linker_init@entry=false)</div>
<div>    at llvm/projects/compiler-rt/lib/tsan/rtl/tsan_rtl_mutex.cc:79</div><div>#3  0x00007fcc444dcfc4 in __interceptor_pthread_mutex_init (m=0x7fcc20f93bc0, a=0x0) at llvm/projects/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc:1041</div>
<div>#4  0x00007fcc44547a03 in PthreadMutex::PthreadMutex (this=0x7fcc20f93bc0, recursive=false) at llvm/projects/compiler-rt/test/tsan/deadlock_detector_stress_test.cc:35</div><div>#5  0x00007fcc44548823 in LockTest::CreateAndDestroyLocksLoop (this=0x7fff7b7708b0) at llvm/projects/compiler-rt/test/tsan/deadlock_detector_stress_test.cc:529</div>
<div>#6  0x00007fcc44547d0c in LockTest::Thread (param=0x7fff7b770470) at llvm/projects/compiler-rt/test/tsan/deadlock_detector_stress_test.cc:551</div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">
On Tue, Jul 8, 2014 at 6:37 AM, Dmitry Vyukov <span dir="ltr"><<a href="mailto:dvyukov@google.com" target="_blank">dvyukov@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Author: dvyukov<br>
Date: Tue Jul  8 08:36:59 2014<br>
New Revision: 212532<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=212532&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=212532&view=rev</a><br>
Log:<br>
tsan: fix a potential hang<br>
<br>
idx0 is not updated in the branch,<br>
so if we take that branch idx0 will stay updated forever<br>
<br>
<br>
<br>
Modified:<br>
    compiler-rt/trunk/lib/tsan/rtl/tsan_sync.cc<br>
<br>
Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_sync.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_sync.cc?rev=212532&r1=212531&r2=212532&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_sync.cc?rev=212532&r1=212531&r2=212532&view=diff</a><br>

==============================================================================<br>
--- compiler-rt/trunk/lib/tsan/rtl/tsan_sync.cc (original)<br>
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_sync.cc Tue Jul  8 08:36:59 2014<br>
@@ -133,7 +133,7 @@ SyncVar* MetaMap::GetAndLock(ThreadState<br>
   u32 myidx = 0;<br>
   SyncVar *mys = 0;<br>
   for (;;) {<br>
-    u32 idx = *meta;<br>
+    u32 idx = idx0;<br>
     for (;;) {<br>
       if (idx == 0)<br>
         break;<br>
@@ -156,8 +156,10 @@ SyncVar* MetaMap::GetAndLock(ThreadState<br>
     }<br>
     if (!create)<br>
       return 0;<br>
-    if (*meta != idx0)<br>
+    if (*meta != idx0) {<br>
+      idx0 = *meta;<br>
       continue;<br>
+    }<br>
<br>
     if (myidx == 0) {<br>
       const u64 uid = atomic_fetch_add(&uid_gen_, 1, memory_order_relaxed);<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div dir="ltr">Alexey Samsonov<br><a href="mailto:vonosmas@gmail.com" target="_blank">vonosmas@gmail.com</a></div>
</div>