]> granicus.if.org Git - icinga2/commitdiff
Fix race condition in TimePeriod::Start.
authorGunnar Beutner <gunnar@beutner.name>
Sun, 15 Dec 2013 17:36:31 +0000 (18:36 +0100)
committerGunnar Beutner <gunnar@beutner.name>
Sun, 15 Dec 2013 17:46:14 +0000 (18:46 +0100)
Refs #5337

lib/icinga/timeperiod.cpp
lib/icinga/timeperiod.h

index 4b081af79266fa85ebb86146c0cb7870e7e919e4..44ff1dde5d47bc0111ded92b6fbcccb74c41929e 100644 (file)
@@ -32,17 +32,20 @@ REGISTER_TYPE(TimePeriod);
 
 static Timer::Ptr l_UpdateTimer;
 
+INITIALIZE_ONCE(&TimePeriod::StaticInitialize);
+
+void TimePeriod::StaticInitialize(void)
+{
+       l_UpdateTimer = make_shared<Timer>();
+       l_UpdateTimer->SetInterval(300);
+       l_UpdateTimer->OnTimerExpired.connect(boost::bind(&TimePeriod::UpdateTimerHandler));
+       l_UpdateTimer->Start();
+}
+
 void TimePeriod::Start(void)
 {
        DynamicObject::Start();
 
-       if (!l_UpdateTimer) {
-               l_UpdateTimer = make_shared<Timer>();
-               l_UpdateTimer->SetInterval(300);
-               l_UpdateTimer->OnTimerExpired.connect(boost::bind(&TimePeriod::UpdateTimerHandler));
-               l_UpdateTimer->Start();
-       }
-
        /* Pre-fill the time period for the next 24 hours. */
        double now = Utility::GetTime();
        UpdateRegion(now, now + 24 * 3600, true);
index 8062b5c7ddbee59a2fea8b9dce52892cfb67e434..bdc210b6114f820917fbfce8d0e7d69cb0f39a39 100644 (file)
@@ -38,6 +38,8 @@ public:
        DECLARE_PTR_TYPEDEFS(TimePeriod);
        DECLARE_TYPENAME(TimePeriod);
 
+       static void StaticInitialize(void);
+
        virtual void Start(void);
 
        void UpdateRegion(double begin, double end, bool clearExisting);