]> granicus.if.org Git - icinga2/commitdiff
Fix crash in ConfigItem::Commit
authorGunnar Beutner <gunnar.beutner@netways.de>
Wed, 18 May 2016 10:53:41 +0000 (12:53 +0200)
committerGunnar Beutner <gunnar.beutner@netways.de>
Thu, 19 May 2016 07:50:55 +0000 (09:50 +0200)
fixes #11804

lib/config/configitem.cpp

index 580bb97f32d8c22132899149aae49cdd26d05015..e26263a0cee02cd6fcf6225e3af8f38e8ed7bf18 100644 (file)
@@ -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::Ptr> 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;