diff options
-rw-r--r-- | src/porting.cpp | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/src/porting.cpp b/src/porting.cpp index f349c0ce5..f3a0ab074 100644 --- a/src/porting.cpp +++ b/src/porting.cpp @@ -75,10 +75,45 @@ void signal_handler_init(void) } #else // _WIN32 + #include <signal.h> + #include <windows.h> + + BOOL WINAPI event_handler(DWORD sig) + { + switch(sig) + { + case CTRL_C_EVENT: + case CTRL_CLOSE_EVENT: + case CTRL_LOGOFF_EVENT: + case CTRL_SHUTDOWN_EVENT: + + if(g_killed == false) + { + dstream<<DTIME<<"INFO: event_handler(): " + <<"Ctrl+C, Close Event, Logoff Event or Shutdown Event, shutting down."<<std::endl; + dstream<<DTIME<<"INFO: event_handler(): " + <<"Printing debug stacks"<<std::endl; + debug_stacks_print(); + + g_killed = true; + } + else + { + (void)signal(SIGINT, SIG_DFL); + } + break; + case CTRL_BREAK_EVENT: + break; + } + + return TRUE; + } + void signal_handler_init(void) { - // No-op + dstream<<"signal_handler_init()"<<std::endl; + SetConsoleCtrlHandler( (PHANDLER_ROUTINE)event_handler,TRUE); } #endif |