summaryrefslogtreecommitdiff
path: root/src/node_watchdog.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/node_watchdog.cc')
-rw-r--r--src/node_watchdog.cc13
1 files changed, 10 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
}