diff --git a/src/core/main.cpp b/src/core/main.cpp index 18e19a5..ec24cbd 100644 --- a/src/core/main.cpp +++ b/src/core/main.cpp @@ -13,6 +13,7 @@ using std::vector; using std::string; void signalHandler( int ); +void shutdown(); // Provide global hooks for signal handler Logger* globalLogger; @@ -38,7 +39,7 @@ int main(int args, char **argv) { { ConfigManager configManager(logger, arguments); EventBus eventBus(logger); - UI::Server uIServer(logger, eventBus); + UI::Server uIServer(logger, eventBus); Resolver::Server resolver(logger, eventBus); // Pass objects to global scope for signal handler @@ -78,14 +79,17 @@ int main(int args, char **argv) { } catch (Exception& e) { logger.fatal << "Uncaught Exception: " << e.what() << Logger::commit; + shutdown(); return 1; } catch (std::system_error& e) { logger.fatal << "Uncaught system_error exception: " << e.what() << Logger::commit; + shutdown(); return 1; } catch (int e) { logger.fatal << "Uncaught Exception with error code " << e << Logger::commit; + shutdown(); return 1; } return 0; @@ -97,16 +101,20 @@ void signalHandler( int signalNumber ) { static auto firstCall = true; if(firstCall) { firstCall = false; - globalLogger->warn << "Shutting down Plains..." << Logger::commit; - globalResolver->~Server(); - //globalUIServer->~Server(); - globalEventBus->~EventBus(); - globalConfigManager->~ConfigManager(); - globalLogger->info.ln ("PLAINS shut down."); - globalLogger->~Logger(); + shutdown(); exit(0); } + else exit(1); 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(); +}