]> granicus.if.org Git - icinga2/commitdiff
Fix crash in Dependency::Stop()
authorMichael Friedrich <michael.friedrich@netways.de>
Thu, 12 Mar 2015 10:43:04 +0000 (11:43 +0100)
committerMichael Friedrich <michael.friedrich@netways.de>
Thu, 12 Mar 2015 10:44:55 +0000 (11:44 +0100)
This partially reverts the fix in #8436

fixes #8687
refs #8436

lib/base/application.cpp
lib/base/application.hpp
lib/db_ido_mysql/idomysqlconnection.cpp
lib/db_ido_pgsql/idopgsqlconnection.cpp
lib/remote/apilistener.cpp

index 7ce329e24a63b8c47b9c0d9d1a5caffd6f960f81..4d72652b4f422171ea842399bad624e0eb0a7b7a 100644 (file)
@@ -57,7 +57,6 @@ static bool l_InExceptionHandler = false;
 int Application::m_ArgC;
 char **Application::m_ArgV;
 double Application::m_StartTime;
-int Application::m_ExitStatus = 0;
 
 /**
  * Constructor for the Application class.
@@ -107,6 +106,12 @@ Application::~Application(void)
 
 void Application::Exit(int rc)
 {
+       if (rc)
+               Log(LogCritical, "Application")
+                   << "Shutting down after a fatal error; exit code: " << rc;
+       else
+               Log(LogInformation, "Application", "Shutting down...");
+
        std::cout.flush();
 
        BOOST_FOREACH(const Logger::Ptr& logger, Logger::GetLoggers()) {
@@ -310,11 +315,6 @@ mainloop:
                goto mainloop;
        }
 
-       if (m_ExitStatus)
-               Log(LogInformation, "Application", "Shutting down Icinga after a fatal error.");
-       else
-               Log(LogInformation, "Application", "Shutting down Icinga...");
-
        DynamicObject::StopObjects();
        Application::GetInstance()->OnShutdown();
 
@@ -361,9 +361,10 @@ pid_t Application::StartReloadProcess(void)
  * Signals the application to shut down during the next
  * execution of the event loop.
  */
-void Application::RequestShutdown(int rc)
+void Application::RequestShutdown(void)
 {
-       m_ExitStatus = rc > m_ExitStatus ? rc : m_ExitStatus;
+       Log(LogInformation, "Application", "Received request to shut down.");
+
        m_ShuttingDown = true;
 }
 
index bc2b73a1ba7cfaeccb30f7d3b5fd97362f6e63ad..37bf6aa99a6fc75edffa6784524f04f220dd7bda 100644 (file)
@@ -69,7 +69,7 @@ public:
 
        static void InstallExceptionHandlers(void);
 
-       static void RequestShutdown(int rc = 0);
+       static void RequestShutdown(void);
        static void RequestRestart(void);
        static void RequestReopenLogs(void);
 
@@ -162,7 +162,6 @@ private:
        static bool m_Debugging; /**< Whether debugging is enabled. */
        static LogSeverity m_DebuggingSeverity; /**< Whether debugging severity is set. */
        static double m_StartTime;
-       static int m_ExitStatus;
 
 #ifndef _WIN32
        static void SigIntTermHandler(int signum);
index e66479ba4d6d8c64b59b5b098655a21275419f56..bf2f660cc530528a5f1e6517203e0e57c7a93c8c 100644 (file)
@@ -228,8 +228,7 @@ void IdoMysqlConnection::Reconnect(void)
 
                        Log(LogCritical, "IdoMysqlConnection", "Schema does not provide any valid version! Verify your schema installation.");
 
-                       Application::RequestShutdown(EXIT_FAILURE);
-                       return;
+                       Application::Exit(EXIT_FAILURE);
                }
 
                DiscardRows(result);
@@ -246,8 +245,7 @@ void IdoMysqlConnection::Reconnect(void)
                            << "Schema version '" << version << "' does not match the required version '"
                            << IDO_COMPAT_SCHEMA_VERSION << "' (or newer)! Please check the upgrade documentation.";
 
-                       Application::RequestShutdown(EXIT_FAILURE);
-                       return;
+                       Application::Exit(EXIT_FAILURE);
                }
 
                String instanceName = GetInstanceName();
index 54622c6c9bc8adc1db72755a7bc9981200103452..122075a4f7d749de798bb5d3e74b0003c4c02808 100644 (file)
@@ -234,7 +234,7 @@ void IdoPgsqlConnection::Reconnect(void)
 
                        Log(LogCritical, "IdoPgsqlConnection", "Schema does not provide any valid version! Verify your schema installation.");
 
-                       BOOST_THROW_EXCEPTION(std::runtime_error("Schema does not provide any valid version! Verify your schema installation."));
+                       Application::Exit(EXIT_FAILURE);
                }
 
                String version = row->Get("version");
@@ -250,8 +250,7 @@ void IdoPgsqlConnection::Reconnect(void)
                            << "Schema version '" << version << "' does not match the required version '"
                            << IDO_COMPAT_SCHEMA_VERSION << "' (or newer)! Please check the upgrade documentation.";
 
-                       Application::RequestShutdown(EXIT_FAILURE);
-                       return;
+                       Application::Exit(EXIT_FAILURE);
                }
 
                String instanceName = GetInstanceName();
index 7fe35b5c9725c01f1c5ef39061f7ba5d0c4e47c8..42042270a211b2da8f22d434c04da4dfadd979c0 100644 (file)
@@ -110,7 +110,7 @@ void ApiListener::Start(void)
        if (!AddListener(GetBindHost(), GetBindPort())) {
                Log(LogCritical, "ApiListener")
                     << "Cannot add listener on host '" << GetBindHost() << "' for port '" << GetBindPort() << "'.";
-               Application::RequestShutdown(EXIT_FAILURE);
+               Application::Exit(EXIT_FAILURE);
        }
 
        m_Timer = new Timer();