From 2e600a78107b99ca512be03e90c14f36924b4da0 Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Tue, 16 Apr 2013 10:55:23 +0200 Subject: [PATCH] More bugfixes for timeperiods. --- lib/base/dynamicobject.cpp | 8 ++++--- lib/icinga/icingaapplication.cpp | 2 +- lib/icinga/legacytimeperiod.cpp | 37 ++++++++++++++++---------------- 3 files changed, 24 insertions(+), 23 deletions(-) diff --git a/lib/base/dynamicobject.cpp b/lib/base/dynamicobject.cpp index 1418d1756..055d38ea8 100644 --- a/lib/base/dynamicobject.cpp +++ b/lib/base/dynamicobject.cpp @@ -289,10 +289,12 @@ void DynamicObject::InternalSetAttribute(const String& name, const Value& data, if (!allowEditConfig && (it->second.GetType() & Attribute_Config)) BOOST_THROW_EXCEPTION(std::runtime_error("Config properties are immutable: '" + name + "'.")); - it->second.SetValue(tx, data); + if (tx > it->second.GetTx()) { + it->second.SetValue(tx, data); - if (it->second.GetType() & Attribute_Config) - m_ConfigTx = tx; + if (it->second.GetType() & Attribute_Config) + m_ConfigTx = tx; + } } if (IsRegistered()) { diff --git a/lib/icinga/icingaapplication.cpp b/lib/icinga/icingaapplication.cpp index 9e5f09660..5125e93ab 100644 --- a/lib/icinga/icingaapplication.cpp +++ b/lib/icinga/icingaapplication.cpp @@ -185,7 +185,7 @@ shared_ptr IcingaApplication::GetSSLContext(void) const return m_SSLContext; } -bool IcingaApplication::ResolveMacro(const String& macro, const Dictionary::Ptr& cr, String *result) const +bool IcingaApplication::ResolveMacro(const String& macro, const Dictionary::Ptr&, String *result) const { double now = Utility::GetTime(); diff --git a/lib/icinga/legacytimeperiod.cpp b/lib/icinga/legacytimeperiod.cpp index 51173626a..8d9dae931 100644 --- a/lib/icinga/legacytimeperiod.cpp +++ b/lib/icinga/legacytimeperiod.cpp @@ -118,29 +118,31 @@ Array::Ptr LegacyTimePeriod::ScriptFunc(const TimePeriod::Ptr& tp, double begin, Dictionary::Ptr ranges = tp->Get("ranges"); - time_t tempts = begin; - tm reference; + + + if (ranges) { + for (int i = 0; i <= (end - begin) / (24 * 60 * 60); i++) { + time_t refts = begin + i * 24 * 60 * 60; + tm reference; #ifdef _MSC_VER - tm *temp = localtime(&tempts); + tm *temp = localtime(&refts); - if (temp == NULL) { - BOOST_THROW_EXCEPTION(posix_error() - << boost::errinfo_api_function("localtime") - << boost::errinfo_errno(errno)); - } + if (temp == NULL) { + BOOST_THROW_EXCEPTION(posix_error() + << boost::errinfo_api_function("localtime") + << boost::errinfo_errno(errno)); + } - reference = *temp; + reference = *temp; #else /* _MSC_VER */ - if (localtime_r(&tempts, &reference) == NULL) { - BOOST_THROW_EXCEPTION(posix_error() - << boost::errinfo_api_function("localtime_r") - << boost::errinfo_errno(errno)); - } + if (localtime_r(&refts, &reference) == NULL) { + BOOST_THROW_EXCEPTION(posix_error() + << boost::errinfo_api_function("localtime_r") + << boost::errinfo_errno(errno)); + } #endif /* _MSC_VER */ - if (ranges) { - for (int i = 0; i <= (end - begin) / (24 * 60 * 60); i++) { ObjectLock olock(ranges); String key; Value value; @@ -150,8 +152,6 @@ Array::Ptr LegacyTimePeriod::ScriptFunc(const TimePeriod::Ptr& tp, double begin, ProcessTimeRanges(value, &reference, segments); } - - reference.tm_mday++; } } @@ -159,4 +159,3 @@ Array::Ptr LegacyTimePeriod::ScriptFunc(const TimePeriod::Ptr& tp, double begin, return segments; } - -- 2.40.0