aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/porting.cpp37
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