From: Gunnar Beutner Date: Wed, 18 May 2016 10:53:41 +0000 (+0200) Subject: Fix crash in ConfigItem::Commit X-Git-Tag: v2.4.9~3 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9687e27c389c6a6455159a12c76e7f23700f5ada;p=icinga2 Fix crash in ConfigItem::Commit fixes #11804 --- diff --git a/lib/config/configitem.cpp b/lib/config/configitem.cpp index 580bb97f3..e26263a0c 100644 --- a/lib/config/configitem.cpp +++ b/lib/config/configitem.cpp @@ -194,7 +194,10 @@ ConfigObject::Ptr ConfigItem::Commit(bool discard) Log(LogNotice, "ConfigObject") << "Ignoring config object '" << m_Name << "' of type '" << m_Type << "' due to errors: " << DiagnosticInformation(ex); - m_IgnoredItems.push_back(m_DebugInfo.Path); + { + boost::mutex::scoped_lock lock(m_Mutex); + m_IgnoredItems.push_back(m_DebugInfo.Path); + } return ConfigObject::Ptr(); } @@ -243,7 +246,10 @@ ConfigObject::Ptr ConfigItem::Commit(bool discard) Log(LogNotice, "ConfigObject") << "Ignoring config object '" << m_Name << "' of type '" << m_Type << "' due to errors: " << DiagnosticInformation(ex); - m_IgnoredItems.push_back(m_DebugInfo.Path); + { + boost::mutex::scoped_lock lock(m_Mutex); + m_IgnoredItems.push_back(m_DebugInfo.Path); + } return ConfigObject::Ptr(); } @@ -259,7 +265,10 @@ ConfigObject::Ptr ConfigItem::Commit(bool discard) Log(LogNotice, "ConfigObject") << "Ignoring config object '" << m_Name << "' of type '" << m_Type << "' due to errors: " << DiagnosticInformation(ex); - m_IgnoredItems.push_back(m_DebugInfo.Path); + { + boost::mutex::scoped_lock lock(m_Mutex); + m_IgnoredItems.push_back(m_DebugInfo.Path); + } return ConfigObject::Ptr(); } @@ -374,7 +383,10 @@ void ConfigItem::OnAllConfigLoadedHelper(void) Unregister(); - m_IgnoredItems.push_back(m_DebugInfo.Path); + { + boost::mutex::scoped_lock lock(m_Mutex); + m_IgnoredItems.push_back(m_DebugInfo.Path); + } return; } @@ -645,6 +657,8 @@ std::vector ConfigItem::GetItems(const String& type) void ConfigItem::RemoveIgnoredItems(const String& allowedConfigPath) { + boost::mutex::scoped_lock lock(m_Mutex); + BOOST_FOREACH(const String& path, m_IgnoredItems) { if (path.Find(allowedConfigPath) == String::NPos) continue;