diff --git a/backward.hpp b/backward.hpp index 670aa45..b6dce44 100644 --- a/backward.hpp +++ b/backward.hpp @@ -330,10 +330,10 @@ #endif #endif // defined(BACKWARD_SYSTEM_DARWIN) +#include #if defined(BACKWARD_SYSTEM_WINDOWS) #include -#include #include #include @@ -4209,7 +4209,7 @@ class SignalHandling { struct sigaction action; memset(&action, 0, sizeof action); action.sa_flags = - static_cast(SA_SIGINFO | SA_ONSTACK | SA_NODEFER | SA_RESETHAND); + static_cast(SA_SIGINFO | SA_ONSTACK | SA_NODEFER); sigfillset(&action.sa_mask); sigdelset(&action.sa_mask, posix_signals[i]); #if defined(__clang__) @@ -4287,16 +4287,16 @@ class SignalHandling { private: details::handle _stack_content; bool _loaded; + static std::mutex _mu; #ifdef __GNUC__ __attribute__((noreturn)) #endif static void sig_handler(int signo, siginfo_t *info, void *_ctx) { + std::lock_guard lk(_mu); handleSignal(signo, info, _ctx); - // try to forward the signal. - raise(info->si_signo); // terminate the process immediately. puts("watf? exit");