[compiler-rt] r208250 - [MSan] Fixup for r206983: MsanThread may be unavailable in signal handler: signals may be raised while thread is being destroyed

Alexey Samsonov samsonov at google.com
Wed May 7 14:23:13 PDT 2014


Author: samsonov
Date: Wed May  7 16:23:12 2014
New Revision: 208250

URL: http://llvm.org/viewvc/llvm-project?rev=208250&view=rev
Log:
[MSan] Fixup for r206983: MsanThread may be unavailable in signal handler: signals may be raised while thread is being destroyed

Modified:
    compiler-rt/trunk/lib/msan/msan.cc
    compiler-rt/trunk/lib/msan/msan_interceptors.cc

Modified: compiler-rt/trunk/lib/msan/msan.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/msan.cc?rev=208250&r1=208249&r2=208250&view=diff
==============================================================================
--- compiler-rt/trunk/lib/msan/msan.cc (original)
+++ compiler-rt/trunk/lib/msan/msan.cc Wed May  7 16:23:12 2014
@@ -237,7 +237,8 @@ const char *GetOriginDescrIfStack(u32 id
 }
 
 u32 ChainOrigin(u32 id, StackTrace *stack) {
-  if (GetCurrentThread()->InSignalHandler())
+  MsanThread *t = GetCurrentThread();
+  if (t && t->InSignalHandler())
     return id;
   uptr idx = Min(stack->size, kStackTraceMax - 1);
   stack->trace[idx] = TRACE_MAKE_CHAINED(id);

Modified: compiler-rt/trunk/lib/msan/msan_interceptors.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/msan_interceptors.cc?rev=208250&r1=208249&r2=208250&view=diff
==============================================================================
--- compiler-rt/trunk/lib/msan/msan_interceptors.cc (original)
+++ compiler-rt/trunk/lib/msan/msan_interceptors.cc Wed May  7 16:23:12 2014
@@ -982,8 +982,14 @@ INTERCEPTOR(int, getrusage, int who, voi
 
 class SignalHandlerScope {
  public:
-  SignalHandlerScope() { GetCurrentThread()->EnterSignalHandler(); }
-  ~SignalHandlerScope() { GetCurrentThread()->LeaveSignalHandler(); }
+  SignalHandlerScope() {
+    if (MsanThread *t = GetCurrentThread())
+      t->EnterSignalHandler();
+  }
+  ~SignalHandlerScope() {
+    if (MsanThread *t = GetCurrentThread())
+      t->LeaveSignalHandler();
+  }
 };
 
 // sigactions_mu guarantees atomicity of sigaction() and signal() calls.





More information about the llvm-commits mailing list