[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