summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexey Samsonov <samsonov@google.com>2014-05-07 21:23:12 +0000
committerAlexey Samsonov <samsonov@google.com>2014-05-07 21:23:12 +0000
commit2fccdfbe70c95aa4e010d77c2d19fa5e0deb5d2e (patch)
treecf16b0b4e3bcb9b0f138ccbfecc96f466740a881
parentdf6860279eff4c4558e8d8ef73920ce0ac002a79 (diff)
downloadbcm5719-llvm-2fccdfbe70c95aa4e010d77c2d19fa5e0deb5d2e.tar.gz
bcm5719-llvm-2fccdfbe70c95aa4e010d77c2d19fa5e0deb5d2e.zip
[MSan] Fixup for r206983: MsanThread may be unavailable in signal handler: signals may be raised while thread is being destroyed
llvm-svn: 208250
-rw-r--r--compiler-rt/lib/msan/msan.cc3
-rw-r--r--compiler-rt/lib/msan/msan_interceptors.cc10
2 files changed, 10 insertions, 3 deletions
diff --git a/compiler-rt/lib/msan/msan.cc b/compiler-rt/lib/msan/msan.cc
index cb3498ef847..60004a133de 100644
--- a/compiler-rt/lib/msan/msan.cc
+++ b/compiler-rt/lib/msan/msan.cc
@@ -237,7 +237,8 @@ const char *GetOriginDescrIfStack(u32 id, uptr *pc) {
}
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);
diff --git a/compiler-rt/lib/msan/msan_interceptors.cc b/compiler-rt/lib/msan/msan_interceptors.cc
index e71c4045854..65acf0d3e1c 100644
--- a/compiler-rt/lib/msan/msan_interceptors.cc
+++ b/compiler-rt/lib/msan/msan_interceptors.cc
@@ -982,8 +982,14 @@ INTERCEPTOR(int, getrusage, int who, void *usage) {
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.
OpenPOWER on IntegriCloud