summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/node_watchdog.cc13
-rw-r--r--src/node_watchdog.h1
2 files changed, 11 insertions, 3 deletions
diff --git a/src/node_watchdog.cc b/src/node_watchdog.cc
index 01b39123be..5d95c4132f 100644
--- a/src/node_watchdog.cc
+++ b/src/node_watchdog.cc
@@ -150,7 +150,8 @@ void SigintWatchdogHelper::HandleSignal(int signum) {
// Windows starts a separate thread for executing the handler, so no extra
// helper thread is required.
BOOL WINAPI SigintWatchdogHelper::WinCtrlCHandlerRoutine(DWORD dwCtrlType) {
- if (dwCtrlType == CTRL_C_EVENT || dwCtrlType == CTRL_BREAK_EVENT) {
+ if (!instance.watchdog_disabled_ &&
+ (dwCtrlType == CTRL_C_EVENT || dwCtrlType == CTRL_BREAK_EVENT)) {
InformWatchdogsAboutSignal();
// Return true because the signal has been handled.
@@ -207,7 +208,11 @@ int SigintWatchdogHelper::Start() {
RegisterSignalHandler(SIGINT, HandleSignal);
#else
- SetConsoleCtrlHandler(WinCtrlCHandlerRoutine, TRUE);
+ if (watchdog_disabled_) {
+ watchdog_disabled_ = false;
+ } else {
+ SetConsoleCtrlHandler(WinCtrlCHandlerRoutine, TRUE);
+ }
#endif
return 0;
@@ -251,7 +256,7 @@ bool SigintWatchdogHelper::Stop() {
RegisterSignalHandler(SIGINT, SignalExit, true);
#else
- SetConsoleCtrlHandler(WinCtrlCHandlerRoutine, FALSE);
+ watchdog_disabled_ = true;
#endif
had_pending_signal = has_pending_signal_;
@@ -292,6 +297,8 @@ SigintWatchdogHelper::SigintWatchdogHelper()
has_running_thread_ = false;
stopping_ = false;
CHECK_EQ(0, uv_sem_init(&sem_, 0));
+#else
+ watchdog_disabled_ = false;
#endif
}
diff --git a/src/node_watchdog.h b/src/node_watchdog.h
index dd97e4e735..2d55d782d0 100644
--- a/src/node_watchdog.h
+++ b/src/node_watchdog.h
@@ -91,6 +91,7 @@ class SigintWatchdogHelper {
static void* RunSigintWatchdog(void* arg);
static void HandleSignal(int signum);
#else
+ bool watchdog_disabled_;
static BOOL WINAPI WinCtrlCHandlerRoutine(DWORD dwCtrlType);
#endif
};