[llvm-commits] [compiler-rt] r162169 - in /compiler-rt/trunk/lib/tsan/rtl: tsan_rtl_mutex.cc tsan_sync.cc

Dmitry Vyukov dvyukov at google.com
Sat Aug 18 04:49:01 PDT 2012


Author: dvyukov
Date: Sat Aug 18 06:49:00 2012
New Revision: 162169

URL: http://llvm.org/viewvc/llvm-project?rev=162169&view=rev
Log:
tsan: proper handling of linker initialized mutexes

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

Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_mutex.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_mutex.cc?rev=162169&r1=162168&r2=162169&view=diff
==============================================================================
--- compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_mutex.cc (original)
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_mutex.cc Sat Aug 18 06:49:00 2012
@@ -42,23 +42,21 @@
   SyncVar *s = ctx->synctab.GetAndRemove(thr, pc, addr);
   if (s == 0)
     return;
-  if (!s->is_linker_init) {
-    MemoryWrite1Byte(thr, pc, addr);
-    if (flags()->report_destroy_locked
-        && s->owner_tid != SyncVar::kInvalidTid
-        && !s->is_broken) {
-      s->is_broken = true;
-      ScopedReport rep(ReportTypeMutexDestroyLocked);
-      rep.AddMutex(s);
-      StackTrace trace;
-      trace.ObtainCurrent(thr, pc);
-      rep.AddStack(&trace);
-      FastState last(s->last_lock);
-      RestoreStack(last.tid(), last.epoch(), &trace);
-      rep.AddStack(&trace);
-      rep.AddLocation(s->addr, 1);
-      OutputReport(rep);
-    }
+  MemoryWrite1Byte(thr, pc, addr);
+  if (flags()->report_destroy_locked
+      && s->owner_tid != SyncVar::kInvalidTid
+      && !s->is_broken) {
+    s->is_broken = true;
+    ScopedReport rep(ReportTypeMutexDestroyLocked);
+    rep.AddMutex(s);
+    StackTrace trace;
+    trace.ObtainCurrent(thr, pc);
+    rep.AddStack(&trace);
+    FastState last(s->last_lock);
+    RestoreStack(last.tid(), last.epoch(), &trace);
+    rep.AddStack(&trace);
+    rep.AddLocation(s->addr, 1);
+    OutputReport(rep);
   }
   DestroyAndFree(s);
 }

Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_sync.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_sync.cc?rev=162169&r1=162168&r2=162169&view=diff
==============================================================================
--- compiler-rt/trunk/lib/tsan/rtl/tsan_sync.cc (original)
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_sync.cc Sat Aug 18 06:49:00 2012
@@ -123,6 +123,8 @@
       res = *prev;
       while (res) {
         if (res->addr == addr) {
+          if (res->is_linker_init)
+            return 0;
           *prev = res->next;
           break;
         }
@@ -147,6 +149,8 @@
     res = *prev;
     while (res) {
       if (res->addr == addr) {
+        if (res->is_linker_init)
+          return 0;
         *prev = res->next;
         break;
       }





More information about the llvm-commits mailing list