]> granicus.if.org Git - icinga2/commitdiff
Fix crash in DbConnection::ProgramStatusHandler
authorGunnar Beutner <gunnar@beutner.name>
Tue, 27 Jan 2015 08:53:07 +0000 (09:53 +0100)
committerGunnar Beutner <gunnar@beutner.name>
Tue, 27 Jan 2015 08:53:07 +0000 (09:53 +0100)
fixes #8288

lib/db_ido/dbconnection.cpp
lib/db_ido/dbconnection.hpp

index 0a37e8fbcbd9cfbb117b3fa47e61908bab85c07d..844b32b1560bb42ea4827a51025818406d989b02 100644 (file)
@@ -26,7 +26,6 @@
 #include "base/convert.hpp"
 #include "base/objectlock.hpp"
 #include "base/utility.hpp"
-#include "base/initialize.hpp"
 #include "base/logger.hpp"
 #include "base/function.hpp"
 #include "base/exception.hpp"
@@ -38,8 +37,7 @@ REGISTER_TYPE(DbConnection);
 REGISTER_SCRIPTFUNCTION(ValidateFailoverTimeout, &DbConnection::ValidateFailoverTimeout);
 
 Timer::Ptr DbConnection::m_ProgramStatusTimer;
-
-INITIALIZE_ONCE(&DbConnection::StaticInitialize);
+boost::once_flag DbConnection::m_OnceFlag = BOOST_ONCE_INIT;
 
 void DbConnection::OnConfigLoaded(void)
 {
@@ -51,6 +49,8 @@ void DbConnection::OnConfigLoaded(void)
 
                SetHAMode(HARunEverywhere);
        }
+
+       boost::call_once(m_OnceFlag, InitializeDbTimer);
 }
 
 void DbConnection::Start(void)
@@ -83,7 +83,7 @@ void DbConnection::Pause(void)
        m_CleanUpTimer.reset();
 }
 
-void DbConnection::StaticInitialize(void)
+void DbConnection::InitializeDbTimer(void)
 {
        m_ProgramStatusTimer = new Timer();
        m_ProgramStatusTimer->SetInterval(10);
index 3d018dbb92993aa12cfce517ea4aed55afaf2239..5317ba0e45083843e6a84fd80207be7f1380d4f6 100644 (file)
@@ -25,6 +25,7 @@
 #include "db_ido/dbobject.hpp"
 #include "db_ido/dbquery.hpp"
 #include "base/timer.hpp"
+#include <boost/thread/once.hpp>
 
 namespace icinga
 {
@@ -39,7 +40,7 @@ class I2_DB_IDO_API DbConnection : public ObjectImpl<DbConnection>
 public:
        DECLARE_OBJECT(DbConnection);
 
-       static void StaticInitialize(void);
+       static void InitializeDbTimer(void);
 
        void SetObjectID(const DbObject::Ptr& dbobj, const DbReference& dbref);
        DbReference GetObjectID(const DbObject::Ptr& dbobj) const;
@@ -96,6 +97,7 @@ private:
        virtual void ClearConfigTable(const String& table) = 0;
 
        static Timer::Ptr m_ProgramStatusTimer;
+       static boost::once_flag m_OnceFlag;
 
        static void InsertRuntimeVariable(const String& key, const Value& value);
        static void ProgramStatusHandler(void);