diff --git a/src/node.cc b/src/node.cc index d68c6d8d148a38..c390126954af60 100644 --- a/src/node.cc +++ b/src/node.cc @@ -543,7 +543,7 @@ void RegisterSignalHandler(int signal, struct sigaction sa; memset(&sa, 0, sizeof(sa)); sa.sa_sigaction = handler; - sa.sa_flags = reset_handler ? SA_RESETHAND : 0; + sa.sa_flags = SA_SIGINFO | (reset_handler ? SA_RESETHAND : 0); sigfillset(&sa.sa_mask); CHECK_EQ(sigaction(signal, &sa, nullptr), 0); } @@ -638,6 +638,7 @@ inline void PlatformInit() { struct sigaction sa; memset(&sa, 0, sizeof(sa)); sa.sa_sigaction = TrapWebAssemblyOrContinue; + sa.sa_flags = SA_SIGINFO; CHECK_EQ(sigaction(SIGSEGV, &sa, nullptr), 0); } V8::EnableWebAssemblyTrapHandler(false); diff --git a/test/addons/register-signal-handler/binding.cc b/test/addons/register-signal-handler/binding.cc index 01580578d159c4..60b3f77521eeda 100644 --- a/test/addons/register-signal-handler/binding.cc +++ b/test/addons/register-signal-handler/binding.cc @@ -13,6 +13,7 @@ using v8::Value; void Handler(int signo, siginfo_t* siginfo, void* ucontext) { char signo_char = signo; int written; + assert(signo == siginfo->si_signo); do { written = write(1, &signo_char, 1); // write() is signal-safe. } while (written == -1 && errno == EINTR);