From ff5a35b7dbe334f8efcfd7293983d942fab18904 Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Sun, 15 Dec 2013 18:36:31 +0100 Subject: [PATCH] Fix race condition in TimePeriod::Start. Refs #5337 --- lib/icinga/timeperiod.cpp | 17 ++++++++++------- lib/icinga/timeperiod.h | 2 ++ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/lib/icinga/timeperiod.cpp b/lib/icinga/timeperiod.cpp index 4b081af79..44ff1dde5 100644 --- a/lib/icinga/timeperiod.cpp +++ b/lib/icinga/timeperiod.cpp @@ -32,17 +32,20 @@ REGISTER_TYPE(TimePeriod); static Timer::Ptr l_UpdateTimer; +INITIALIZE_ONCE(&TimePeriod::StaticInitialize); + +void TimePeriod::StaticInitialize(void) +{ + l_UpdateTimer = make_shared(); + 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(); - 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); diff --git a/lib/icinga/timeperiod.h b/lib/icinga/timeperiod.h index 8062b5c7d..bdc210b61 100644 --- a/lib/icinga/timeperiod.h +++ b/lib/icinga/timeperiod.h @@ -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); -- 2.40.0