]> granicus.if.org Git - icinga2/commitdiff
Make sure that OnStateLoaded is called for all objects
authorGunnar Beutner <gunnar.beutner@netways.de>
Wed, 29 Oct 2014 10:14:04 +0000 (11:14 +0100)
committerGunnar Beutner <gunnar.beutner@netways.de>
Wed, 29 Oct 2014 10:14:32 +0000 (11:14 +0100)
fixes #7482

lib/base/dynamicobject.cpp
lib/base/dynamicobject.ti

index 0d5d0d8b60c0fe680d52362f05032c70c88d7d67..6b933ee0a2e31ccd379fce08a61004122da4cfe6 100644 (file)
@@ -315,6 +315,7 @@ void DynamicObject::RestoreObject(const String& message, int attributeTypes)
        Dictionary::Ptr update = persistentObject->Get("update");
        Deserialize(object, update, false, attributeTypes);
        object->OnStateLoaded();
+       object->SetStateLoaded(true);
 }
 
 void DynamicObject::RestoreObjects(const String& filename, int attributeTypes)
@@ -341,8 +342,21 @@ void DynamicObject::RestoreObjects(const String& filename, int attributeTypes)
 
        upq.Join();
 
+       unsigned long no_state = 0;
+
+       BOOST_FOREACH(const DynamicType::Ptr& type, DynamicType::GetTypes()) {
+               BOOST_FOREACH(const DynamicObject::Ptr& object, type->GetObjects()) {
+                       if (!object->GetStateLoaded()) {
+                               object->OnStateLoaded();
+                               object->SetStateLoaded(true);
+
+                               no_state++;
+                       }
+               }
+       }
+
        Log(LogInformation, "DynamicObject")
-           << "Restored " << restored << " objects";
+           << "Restored " << restored << " objects. Loaded " << no_state << " new objects without state.";
 }
 
 void DynamicObject::StopObjects(void)
index 9bbc354c177ee54ab8041fc0a88e25485fcbd34b..f123fbaf2df2bf91ea0b1aa29d1739fce61aa895 100644 (file)
@@ -62,6 +62,8 @@ abstract class DynamicObject
        [protected] Dictionary::Ptr extensions;
 
        [state] Value override_vars;
+
+       [protected] bool state_loaded;
 };
 
 }