[compiler-rt] r204809 - tsan: fix deadlock during fork

Dmitry Vyukov dvyukov at google.com
Wed Mar 26 07:13:31 PDT 2014


Author: dvyukov
Date: Wed Mar 26 09:13:31 2014
New Revision: 204809

URL: http://llvm.org/viewvc/llvm-project?rev=204809&view=rev
Log:
tsan: fix deadlock during fork
ReportRace takes the two mutexes in the opposite order


Modified:
    compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.cc

Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.cc?rev=204809&r1=204808&r2=204809&view=diff
==============================================================================
--- compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.cc (original)
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.cc Wed Mar 26 09:13:31 2014
@@ -324,18 +324,18 @@ int Finalize(ThreadState *thr) {
 
 #ifndef TSAN_GO
 void ForkBefore(ThreadState *thr, uptr pc) {
-  ctx->report_mtx.Lock();
   ctx->thread_registry->Lock();
+  ctx->report_mtx.Lock();
 }
 
 void ForkParentAfter(ThreadState *thr, uptr pc) {
-  ctx->thread_registry->Unlock();
   ctx->report_mtx.Unlock();
+  ctx->thread_registry->Unlock();
 }
 
 void ForkChildAfter(ThreadState *thr, uptr pc) {
-  ctx->thread_registry->Unlock();
   ctx->report_mtx.Unlock();
+  ctx->thread_registry->Unlock();
 
   uptr nthread = 0;
   ctx->thread_registry->GetNumberOfThreads(0, 0, &nthread /* alive threads */);





More information about the llvm-commits mailing list