Adds better signal handling for quitting

This commit is contained in:
Sven Luethi committed 2021-04-09 17:15:34 +02:00
1 parent f90347b753
commit 4959429aee
1 file changed
+16 -8
+16 -8
View File
@@ -13,6 +13,7 @@ using std::vector;
using std::string; using std::string;
void signalHandler( int ); void signalHandler( int );
void shutdown();
// Provide global hooks for signal handler // Provide global hooks for signal handler
Logger* globalLogger; Logger* globalLogger;
@@ -38,7 +39,7 @@ int main(int args, char **argv) {
{ {
ConfigManager configManager(logger, arguments); ConfigManager configManager(logger, arguments);
EventBus eventBus(logger); EventBus eventBus(logger);
UI::Server uIServer(logger, eventBus); UI::Server uIServer(logger, eventBus);
Resolver::Server resolver(logger, eventBus); Resolver::Server resolver(logger, eventBus);
// Pass objects to global scope for signal handler // Pass objects to global scope for signal handler
@@ -78,14 +79,17 @@ int main(int args, char **argv) {
} }
catch (Exception& e) { catch (Exception& e) {
logger.fatal << "Uncaught Exception: " << e.what() << Logger::commit; logger.fatal << "Uncaught Exception: " << e.what() << Logger::commit;
shutdown();
return 1; return 1;
} }
catch (std::system_error& e) { catch (std::system_error& e) {
logger.fatal << "Uncaught system_error exception: " << e.what() << Logger::commit; logger.fatal << "Uncaught system_error exception: " << e.what() << Logger::commit;
shutdown();
return 1; return 1;
} }
catch (int e) { catch (int e) {
logger.fatal << "Uncaught Exception with error code " << e << Logger::commit; logger.fatal << "Uncaught Exception with error code " << e << Logger::commit;
shutdown();
return 1; return 1;
} }
return 0; return 0;
@@ -97,16 +101,20 @@ void signalHandler( int signalNumber ) {
static auto firstCall = true; static auto firstCall = true;
if(firstCall) { if(firstCall) {
firstCall = false; firstCall = false;
globalLogger->warn << "Shutting down Plains..." << Logger::commit; shutdown();
globalResolver->~Server();
//globalUIServer->~Server();
globalEventBus->~EventBus();
globalConfigManager->~ConfigManager();
globalLogger->info.ln ("PLAINS shut down.");
globalLogger->~Logger();
exit(0); exit(0);
} }
else exit(1);
break; break;
} }
} }
void shutdown() {
globalLogger->warn << "Shutting down Plains..." << Logger::commit;
globalResolver->~Server();
globalUIServer->~Server();
globalEventBus->~EventBus();
globalConfigManager->~ConfigManager();
globalLogger->info.ln ("PLAINS shut down.");
globalLogger->~Logger();
}