From: Gunnar Beutner Date: Sun, 3 Feb 2013 14:47:11 +0000 (+0100) Subject: Bugfix: Crash while reloading config X-Git-Tag: v0.0.2~564 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b997462eef36fd735c64271ca5f5b146fcde1aa3;p=icinga2 Bugfix: Crash while reloading config Fixes #3621 --- diff --git a/lib/config/configitem.cpp b/lib/config/configitem.cpp index 27f3ee009..dd5251523 100644 --- a/lib/config/configitem.cpp +++ b/lib/config/configitem.cpp @@ -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 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 +}