diff options
-rw-r--r-- | include/inspircd.h | 9 | ||||
-rw-r--r-- | src/inspircd.cpp | 6 |
2 files changed, 14 insertions, 1 deletions
diff --git a/include/inspircd.h b/include/inspircd.h index fc5a15da1..984122a18 100644 --- a/include/inspircd.h +++ b/include/inspircd.h @@ -727,12 +727,19 @@ class InspIRCd : public classbase */ static void Rehash(int status); - /** Causes the server to exit immediately + /** Causes the server to exit after unloading modules and + * closing all open file descriptors. + * * @param The exit code to give to the operating system * (See the ExitStatus enum for valid values) */ static void Exit(int status); + /** Causes the server to exit immediately with exit code 0. + * The status code is required for signal handlers, and ignored. + */ + static void QuickExit(int status); + /** Return a count of users, unknown and known connections * @return The number of users */ diff --git a/src/inspircd.cpp b/src/inspircd.cpp index 6630cde5d..14bff2bef 100644 --- a/src/inspircd.cpp +++ b/src/inspircd.cpp @@ -220,6 +220,11 @@ void InspIRCd::SetSignals() signal(SIGCHLD, SIG_IGN); } +void InspIRCd::QuickExit(int status) +{ + exit(0); +} + bool InspIRCd::DaemonSeed() { int childpid; @@ -234,6 +239,7 @@ bool InspIRCd::DaemonSeed() * if the child pid is still around. If theyre not, * they threw an error and we should give up. */ + signal(SIGTERM, InspIRCd::QuickExit); while (kill(childpid, 0) != -1) sleep(1); exit(0); |