diff options
Diffstat (limited to 'compiler-rt/lib/msan/msan_interceptors.cc')
| -rw-r--r-- | compiler-rt/lib/msan/msan_interceptors.cc | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/compiler-rt/lib/msan/msan_interceptors.cc b/compiler-rt/lib/msan/msan_interceptors.cc index eb6888a3a8b..8d39e541895 100644 --- a/compiler-rt/lib/msan/msan_interceptors.cc +++ b/compiler-rt/lib/msan/msan_interceptors.cc @@ -911,17 +911,20 @@ static atomic_uintptr_t sigactions[kMaxSignals]; static StaticSpinMutex sigactions_mu; static void SignalHandler(int signo) { + ScopedThreadLocalStateBackup stlsb; + stlsb.Backup(); UnpoisonParam(1); typedef void (*signal_cb)(int x); signal_cb cb = (signal_cb)atomic_load(&sigactions[signo], memory_order_relaxed); cb(signo); - - UnpoisonThreadLocalState(); + stlsb.Restore(); } static void SignalAction(int signo, void *si, void *uc) { + ScopedThreadLocalStateBackup stlsb; + stlsb.Backup(); UnpoisonParam(3); __msan_unpoison(si, sizeof(__sanitizer_sigaction)); __msan_unpoison(uc, __sanitizer::ucontext_t_sz); @@ -930,8 +933,7 @@ static void SignalAction(int signo, void *si, void *uc) { sigaction_cb cb = (sigaction_cb)atomic_load(&sigactions[signo], memory_order_relaxed); cb(signo, si, uc); - - UnpoisonThreadLocalState(); + stlsb.Restore(); } INTERCEPTOR(int, sigaction, int signo, const __sanitizer_sigaction *act, |

