diff mbox

[RFC,v1,4/8] qom: Delete all instances of an overloaded property

Message ID 62da733ace51056c3b8cb77c2da521e9767dca73.1434320585.git.peter.crosthwaite@xilinx.com
State New
Headers show

Commit Message

Peter Crosthwaite June 14, 2015, 10:37 p.m. UTC
If a property name is overloaded all instances should be deleted by the
deleter.

Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
---
 qom/object.c | 26 ++++++++++++++------------
 1 file changed, 14 insertions(+), 12 deletions(-)
diff mbox

Patch

diff --git a/qom/object.c b/qom/object.c
index 46abf41..967ed0d 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -798,21 +798,23 @@  ObjectProperty *object_property_find(Object *obj, const char *name,
 
 void object_property_del(Object *obj, const char *name, Error **errp)
 {
-    ObjectProperty *prop = object_property_find(obj, name, errp);
-    if (prop == NULL) {
-        return;
-    }
+    for (;;) {
+        ObjectProperty *prop = object_property_find(obj, name, errp);
+        if (prop == NULL) {
+            return;
+        }
 
-    if (prop->release) {
-        prop->release(obj, name, prop->opaque);
-    }
+        if (prop->release) {
+            prop->release(obj, name, prop->opaque);
+        }
 
-    QTAILQ_REMOVE(&obj->properties, prop, node);
+        QTAILQ_REMOVE(&obj->properties, prop, node);
 
-    g_free(prop->name);
-    g_free(prop->type);
-    g_free(prop->description);
-    g_free(prop);
+        g_free(prop->name);
+        g_free(prop->type);
+        g_free(prop->description);
+        g_free(prop);
+    }
 }
 
 void object_property_get(Object *obj, Visitor *v, const char *name,