Core/Mains: Handle SIGBREAK to achieve clean shutdown when users click X button on windows

This commit is contained in:
Shauren
2014-07-23 19:04:07 +02:00
parent a7476a7898
commit 42eeec12bf
2 changed files with 10 additions and 20 deletions

View File

@@ -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)

View File

@@ -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)