--- /dev/null
+/*****************************************************************************\r
+\r
+$Id$\r
+\r
+File: sigs.cpp\r
+Date: 06Apr06\r
+\r
+Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.\r
+Gmail: blackhedd\r
+\r
+This program is free software; you can redistribute it and/or modify\r
+it under the terms of either: 1) the GNU General Public License\r
+as published by the Free Software Foundation; either version 2 of the\r
+License, or (at your option) any later version; or 2) Ruby's License.\r
+\r
+See the file COPYING for complete licensing information.\r
+\r
+*****************************************************************************/\r
+\r
+#include "project.h"\r
+\r
+\r
+bool gTerminateSignalReceived;\r
+\r
+\r
+/**************\r
+SigtermHandler\r
+**************/\r
+\r
+void SigtermHandler (int sig)\r
+{\r
+ // This is a signal-handler, don't do anything frisky. Interrupts are disabled.\r
+ // Set the terminate flag WITHOUT trying to lock a mutex- otherwise we can easily\r
+ // self-deadlock, especially if the event machine is looping quickly.\r
+ gTerminateSignalReceived = true;\r
+}\r
+\r
+\r
+/*********************\r
+InstallSignalHandlers\r
+*********************/\r
+\r
+void InstallSignalHandlers()\r
+{\r
+ #ifdef OS_UNIX\r
+ static bool bInstalled = false;\r
+ if (!bInstalled) {\r
+ bInstalled = true;\r
+ signal (SIGINT, SigtermHandler);\r
+ signal (SIGTERM, SigtermHandler);\r
+ signal (SIGPIPE, SIG_IGN);\r
+ }\r
+ #endif\r
+}\r
+\r
+\r
+\r
+/*******************\r
+WintelSignalHandler\r
+*******************/\r
+\r
+#ifdef OS_WIN32\r
+BOOL WINAPI WintelSignalHandler (DWORD control)\r
+{\r
+ if (control == CTRL_C_EVENT)\r
+ gTerminateSignalReceived = true;\r
+ return TRUE;\r
+}\r
+#endif\r
+\r
+/************\r
+HookControlC\r
+************/\r
+\r
+#ifdef OS_WIN32\r
+void HookControlC (bool hook)\r
+{\r
+ if (hook) {\r
+ // INSTALL hook\r
+ SetConsoleCtrlHandler (WintelSignalHandler, TRUE);\r
+ }\r
+ else {\r
+ // UNINSTALL hook\r
+ SetConsoleCtrlHandler (WintelSignalHandler, FALSE);\r
+ }\r
+}\r
+#endif\r
+\r
+\r