]> granicus.if.org Git - icinga2/commitdiff
Bugfix: Crash while reloading config
authorGunnar Beutner <gunnar.beutner@netways.de>
Sun, 3 Feb 2013 14:47:11 +0000 (15:47 +0100)
committerGunnar Beutner <gunnar.beutner@netways.de>
Sun, 3 Feb 2013 14:47:11 +0000 (15:47 +0100)
Fixes #3621

lib/config/configitem.cpp

index 27f3ee0094470680d58e58913db92a16f23a418b..dd52515230e17d8dba791628aee48a58f7c558c2 100644 (file)
@@ -188,8 +188,12 @@ DynamicObject::Ptr ConfigItem::Commit(void)
                parent->RegisterChild(GetSelf());
        }
 
+       /* We need to make a copy of the child objects becauuse the
+        * OnParentCommitted() handler is going to update the list. */
+       set<ConfigItem::WeakPtr> children = m_ChildObjects;
+
        /* notify our children of the update */
-       BOOST_FOREACH(const ConfigItem::WeakPtr wchild, m_ChildObjects) {
+       BOOST_FOREACH(const ConfigItem::WeakPtr wchild, children) {
                const ConfigItem::Ptr& child = wchild.lock();
 
                if (!child)
@@ -240,7 +244,9 @@ void ConfigItem::UnregisterFromParents(void)
 {
        BOOST_FOREACH(const String& parentName, m_Parents) {
                ConfigItem::Ptr parent = GetObject(GetType(), parentName);
-               parent->UnregisterChild(GetSelf());
+
+               if (parent)
+                       parent->UnregisterChild(GetSelf());
        }
 }
 
@@ -302,4 +308,4 @@ void ConfigItem::Dump(ostream& fp) const
        fp << " {" << "\n";
        m_ExpressionList->Dump(fp, 1);
        fp << "}" << "\n";
-}
\ No newline at end of file
+}