From: Gunnar Beutner Date: Tue, 27 Jan 2015 08:53:07 +0000 (+0100) Subject: Fix crash in DbConnection::ProgramStatusHandler X-Git-Tag: v2.3.0~337 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e7938c9374f6be04682612ce184b7afb84f4f40d;p=icinga2 Fix crash in DbConnection::ProgramStatusHandler fixes #8288 --- diff --git a/lib/db_ido/dbconnection.cpp b/lib/db_ido/dbconnection.cpp index 0a37e8fbc..844b32b15 100644 --- a/lib/db_ido/dbconnection.cpp +++ b/lib/db_ido/dbconnection.cpp @@ -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); diff --git a/lib/db_ido/dbconnection.hpp b/lib/db_ido/dbconnection.hpp index 3d018dbb9..5317ba0e4 100644 --- a/lib/db_ido/dbconnection.hpp +++ b/lib/db_ido/dbconnection.hpp @@ -25,6 +25,7 @@ #include "db_ido/dbobject.hpp" #include "db_ido/dbquery.hpp" #include "base/timer.hpp" +#include namespace icinga { @@ -39,7 +40,7 @@ class I2_DB_IDO_API DbConnection : public ObjectImpl 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);