feat(Core/SignalHandler): Replace ACE signal handling with std (#4877)

This commit is contained in:
Kargatum
2021-03-24 21:50:56 +07:00
committed by GitHub
parent e0d36be56e
commit c4c06a7734
3 changed files with 60 additions and 66 deletions

View File

@@ -43,30 +43,28 @@ extern int m_ServiceStatus;
#endif
/// Handle worldservers's termination signals
class WorldServerSignalHandler : public acore::SignalHandler
void HandleSignal(int sigNum)
{
public:
void HandleSignal(int sigNum) override
switch (sigNum)
{
switch (sigNum)
{
case SIGINT:
World::StopNow(RESTART_EXIT_CODE);
break;
case SIGTERM:
#ifdef _WIN32
case SIGBREAK:
if (m_ServiceStatus != 1)
case SIGINT:
World::StopNow(RESTART_EXIT_CODE);
break;
case SIGTERM:
#if AC_PLATFORM == AC_PLATFORM_WINDOWS
case SIGBREAK:
if (m_ServiceStatus != 1)
#endif
World::StopNow(SHUTDOWN_EXIT_CODE);
break;
/*case SIGSEGV:
sLog->outString("ZOMG! SIGSEGV handled!");
World::StopNow(SHUTDOWN_EXIT_CODE);
break;*/
}
World::StopNow(SHUTDOWN_EXIT_CODE);
break;
/*case SIGSEGV:
sLog->outString("ZOMG! SIGSEGV handled!");
World::StopNow(SHUTDOWN_EXIT_CODE);
break;*/
default:
break;
}
};
}
class FreezeDetectorRunnable : public acore::Runnable
{
@@ -164,19 +162,14 @@ int Master::Run()
sScriptMgr->OnStartup();
///- Initialize the signal handlers
WorldServerSignalHandler signalINT, signalTERM; //, signalSEGV
#ifdef _WIN32
WorldServerSignalHandler signalBREAK;
#endif /* _WIN32 */
acore::SignalHandler signalHandler;
///- Register worldserver's signal handlers
ACE_Sig_Handler handle;
handle.register_handler(SIGINT, &signalINT);
handle.register_handler(SIGTERM, &signalTERM);
#ifdef _WIN32
handle.register_handler(SIGBREAK, &signalBREAK);
signalHandler.handle_signal(SIGINT, &HandleSignal);
signalHandler.handle_signal(SIGTERM, &HandleSignal);
#if AC_PLATFORM == AC_PLATFORM_WINDOWS
signalHandler.handle_signal(SIGBREAK, &HandleSignal);
#endif
//handle.register_handler(SIGSEGV, &signalSEGV);
///- Launch WorldRunnable thread
acore::Thread worldThread(new WorldRunnable);