Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 13 additions & 3 deletions src/porting.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -121,14 +121,23 @@ static void signal_handler(int sig)
}
g_killed = true;
} else {
// If it happens again, defer to the default action.
(void)signal(sig, SIG_DFL);
}
}

void signal_handler_init(void)
void signal_handler_init()
{
(void)signal(SIGINT, signal_handler);
(void)signal(SIGTERM, signal_handler);

/*
* Writing to a closed pipe or socket must not kill the entire process.
* Code should handle write failures directly where relevant.
* If we're unlucky the user's desktop environment might even connect std::cout
* to a closed pipe (see issue #17366) and there's nothing we can do about it...
*/
(void)signal(SIGPIPE, SIG_IGN);
}

#else // _WIN32
Expand All @@ -146,7 +155,8 @@ static BOOL WINAPI event_handler(DWORD sig)
" shutting down." << std::endl;
g_killed = true;
} else {
(void)signal(SIGINT, SIG_DFL);
// If it happens again, defer to the default action.
SetConsoleCtrlHandler(NULL, FALSE);
}
break;
case CTRL_BREAK_EVENT:
Expand All @@ -156,7 +166,7 @@ static BOOL WINAPI event_handler(DWORD sig)
return TRUE;
}

void signal_handler_init(void)
void signal_handler_init()
{
SetConsoleCtrlHandler((PHANDLER_ROUTINE)event_handler, TRUE);
}
Expand Down
Loading