aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2014-07-23 19:04:07 +0200
committerShauren <shauren.trinity@gmail.com>2014-07-23 19:04:07 +0200
commit42eeec12bfdf548b15a2f85d586ef037eab88a00 (patch)
tree45e1d6253fe54c661e229edc404b605c45ea19b9
parenta7476a7898e435a78201d53605b0cfedb4573a78 (diff)
Core/Mains: Handle SIGBREAK to achieve clean shutdown when users click X button on windows
-rw-r--r--src/server/authserver/Main.cpp15
-rw-r--r--src/server/worldserver/Main.cpp15
2 files changed, 10 insertions, 20 deletions
diff --git a/src/server/authserver/Main.cpp b/src/server/authserver/Main.cpp
index 8b9779d2b07..7c2ed4951c5 100644
--- a/src/server/authserver/Main.cpp
+++ b/src/server/authserver/Main.cpp
@@ -120,6 +120,9 @@ int main(int argc, char** argv)
// Set signal handlers
boost::asio::signal_set signals(_ioService, SIGINT, SIGTERM);
+#if PLATFORM == PLATFORM_WINDOWS
+ signals.add(SIGBREAK);
+#endif
signals.async_wait(SignalHandler);
// Set process priority according to configuration settings
@@ -186,18 +189,10 @@ void StopDB()
MySQL::Library_End();
}
-void SignalHandler(const boost::system::error_code& error, int signalNumber)
+void SignalHandler(const boost::system::error_code& error, int /*signalNumber*/)
{
if (!error)
- {
- switch (signalNumber)
- {
- case SIGINT:
- case SIGTERM:
- _ioService.stop();
- break;
- }
- }
+ _ioService.stop();
}
void KeepDatabaseAliveHandler(const boost::system::error_code& error)
diff --git a/src/server/worldserver/Main.cpp b/src/server/worldserver/Main.cpp
index 0c051eae37a..87eb3bae074 100644
--- a/src/server/worldserver/Main.cpp
+++ b/src/server/worldserver/Main.cpp
@@ -158,6 +158,9 @@ extern int main(int argc, char** argv)
// Set signal handlers (this must be done before starting io_service threads, because otherwise they would unblock and exit)
boost::asio::signal_set signals(_ioService, SIGINT, SIGTERM);
+#if PLATFORM == PLATFORM_WINDOWS
+ signals.add(SIGBREAK);
+#endif
signals.async_wait(SignalHandler);
// Start the Boost based thread pool
@@ -367,18 +370,10 @@ void WorldUpdateLoop()
}
}
-void SignalHandler(const boost::system::error_code& error, int signalNumber)
+void SignalHandler(const boost::system::error_code& error, int /*signalNumber*/)
{
if (!error)
- {
- switch (signalNumber)
- {
- case SIGINT:
- case SIGTERM:
- World::StopNow(SHUTDOWN_EXIT_CODE);
- break;
- }
- }
+ World::StopNow(SHUTDOWN_EXIT_CODE);
}
void FreezeDetectorHandler(const boost::system::error_code& error)