diff --git a/include/znc/znc.h b/include/znc/znc.h index 2c50d590..468bddb4 100644 --- a/include/znc/znc.h +++ b/include/znc/znc.h @@ -44,7 +44,8 @@ public: ECONFIG_NOTHING, ECONFIG_NEED_REHASH, ECONFIG_NEED_WRITE, - ECONFIG_NEED_VERBOSE_WRITE + ECONFIG_NEED_VERBOSE_WRITE, + ECONFIG_NEED_QUIT, // Not really config... }; void DeleteUsers(); diff --git a/src/main.cpp b/src/main.cpp index cbe72bf5..603411e5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -132,25 +132,20 @@ static void GenerateHelp(const char *appname) { static void die(int sig) { signal(SIGPIPE, SIG_DFL); - - CUtils::PrintMessage("Exiting on SIG [" + CString(sig) + "]"); - - CZNC::DestroyInstance(); - exit(sig); + CZNC::Get().SetConfigState(CZNC::ECONFIG_NEED_QUIT); } static void signalHandler(int sig) { switch (sig) { case SIGHUP: - CUtils::PrintMessage("Caught SIGHUP"); CZNC::Get().SetConfigState(CZNC::ECONFIG_NEED_REHASH); break; case SIGUSR1: - CUtils::PrintMessage("Caught SIGUSR1"); CZNC::Get().SetConfigState(CZNC::ECONFIG_NEED_VERBOSE_WRITE); break; default: - CUtils::PrintMessage("WTF? Signal handler called for a signal it doesn't know?"); + // WTF? Signal handler called for a signal it doesn't know? + abort(); } } @@ -452,5 +447,7 @@ int main(int argc, char** argv) { CZNC::DestroyInstance(); + CUtils::PrintMessage("Exiting"); + return iRet; } diff --git a/src/znc.cpp b/src/znc.cpp index 55933f8b..7c277323 100644 --- a/src/znc.cpp +++ b/src/znc.cpp @@ -224,6 +224,8 @@ void CZNC::Loop() { break; case ECONFIG_NOTHING: break; + case ECONFIG_NEED_QUIT: + return; } // Check for users that need to be deleted