OSDN Git Service

Replaced mongrel with thin
[redminele/redminele.git] / ruby / lib / ruby / gems / 1.8 / gems / eventmachine-0.12.10-x86-mswin32-60 / ext / sigs.cpp
diff --git a/ruby/lib/ruby/gems/1.8/gems/eventmachine-0.12.10-x86-mswin32-60/ext/sigs.cpp b/ruby/lib/ruby/gems/1.8/gems/eventmachine-0.12.10-x86-mswin32-60/ext/sigs.cpp
new file mode 100644 (file)
index 0000000..54bcf00
--- /dev/null
@@ -0,0 +1,89 @@
+/*****************************************************************************\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