]> granicus.if.org Git - icinga2/commitdiff
Fix problem with missing config items
authorGunnar Beutner <gunnar.beutner@netways.de>
Sat, 8 Nov 2014 13:24:17 +0000 (14:24 +0100)
committerGunnar Beutner <gunnar.beutner@netways.de>
Sat, 8 Nov 2014 13:24:17 +0000 (14:24 +0100)
lib/config/configitem.cpp

index 8199e029fae37cb5ce9a0e61764d66ed55fb0a2e..c39c828ce7d9ec853d2c2d7e617c2f709bc4ef5d 100644 (file)
@@ -231,11 +231,20 @@ void ConfigItem::Register(void)
 {
        String name = m_Name;
 
-       shared_ptr<NameComposer> nc = dynamic_pointer_cast<NameComposer>(Type::GetByName(m_Type));
+       /* If this is a non-abstract object we need to figure out
+        * its real name now - or assign it a temporary name. */
+       if (!m_Abstract) {
+               shared_ptr<NameComposer> nc = dynamic_pointer_cast<NameComposer>(Type::GetByName(m_Type));
 
-       /* If this is a non-abstract object with a composite name we don't register it. */
-       if (!m_Abstract && nc)
-               return;
+               if (nc) {
+                       name = nc->MakeName(m_Name, Dictionary::Ptr());
+
+                       ASSERT(name.IsEmpty() || name == m_Name);
+
+                       if (name.IsEmpty())
+                               name = Utility::NewUniqueID();
+               }
+       }
 
        std::pair<String, String> key = std::make_pair(m_Type, name);
        ConfigItem::Ptr self = GetSelf();