From a6c462c3e32bf2e801e54ad66f7447d6ecf5e63d Mon Sep 17 00:00:00 2001 From: theanarkh Date: Mon, 14 Jul 2025 08:25:40 +0800 Subject: [PATCH] src: call unmask after install signal handler --- src/inspector_agent.cc | 9 +++++---- src/node_watchdog.cc | 5 ++++- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/inspector_agent.cc b/src/inspector_agent.cc index 202ed756c98d8a..87addfa8fbbaf3 100644 --- a/src/inspector_agent.cc +++ b/src/inspector_agent.cc @@ -123,12 +123,11 @@ static int StartDebugSignalHandler() { CHECK_EQ(0, pthread_sigmask(SIG_SETMASK, &sigmask, &savemask)); sigmask = savemask; pthread_t thread; - const int err = pthread_create(&thread, &attr, - StartIoThreadMain, nullptr); - // Restore original mask - CHECK_EQ(0, pthread_sigmask(SIG_SETMASK, &sigmask, nullptr)); + const int err = pthread_create(&thread, &attr, StartIoThreadMain, nullptr); CHECK_EQ(0, pthread_attr_destroy(&attr)); if (err != 0) { + // Restore original mask + CHECK_EQ(0, pthread_sigmask(SIG_SETMASK, &sigmask, nullptr)); fprintf(stderr, "node[%u]: pthread_create: %s\n", uv_os_getpid(), strerror(err)); fflush(stderr); @@ -137,6 +136,8 @@ static int StartDebugSignalHandler() { return -err; } RegisterSignalHandler(SIGUSR1, StartIoThreadWakeup); + // Restore original mask + CHECK_EQ(0, pthread_sigmask(SIG_SETMASK, &sigmask, nullptr)); // Unblock SIGUSR1. A pending SIGUSR1 signal will now be delivered. sigemptyset(&sigmask); sigaddset(&sigmask, SIGUSR1); diff --git a/src/node_watchdog.cc b/src/node_watchdog.cc index 7a493bf460701f..3ea43177a4d75e 100644 --- a/src/node_watchdog.cc +++ b/src/node_watchdog.cc @@ -308,7 +308,10 @@ int SigintWatchdogHelper::Start() { CHECK_EQ(0, pthread_sigmask(SIG_SETMASK, &sigmask, &savemask)); sigmask = savemask; int ret = pthread_create(&thread_, nullptr, RunSigintWatchdog, nullptr); - CHECK_EQ(0, pthread_sigmask(SIG_SETMASK, &sigmask, nullptr)); + + auto cleanup = OnScopeLeave( + [&]() { CHECK_EQ(0, pthread_sigmask(SIG_SETMASK, &sigmask, nullptr)); }); + if (ret != 0) { return ret; }