qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 10/21] qdev: do not propagate properties to subclass


From: Paolo Bonzini
Subject: [Qemu-devel] [PATCH 10/21] qdev: do not propagate properties to subclasses
Date: Wed, 2 May 2012 13:31:02 +0200

As soon as we'll look up properties along the inheritance chain, we
will have duplicates if class A defines some properties and its
subclass B does not define any, because class_b->props will be
left equal to class_a->props.

The solution here is to reintroduce the class_base_init TypeInfo
callback, that was present in one of the early QOM versions but
removed (on my request...) before committing.

Signed-off-by: Paolo Bonzini <address@hidden>
---
 hw/qdev.c |   11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/hw/qdev.c b/hw/qdev.c
index 94fb32e..67d7770 100644
--- a/hw/qdev.c
+++ b/hw/qdev.c
@@ -658,6 +658,16 @@ static void device_finalize(Object *obj)
     QTAILQ_REMOVE(&dev->parent_bus->children, dev, sibling);
 }
 
+static void device_class_base_init(ObjectClass *class, void *data)
+{
+    DeviceClass *klass = DEVICE_CLASS(class);
+
+    /* We explicitly look up properties in the superclasses,
+     * so do not propagate them to the subclasses.
+     */
+    klass->props = NULL;
+}
+
 void device_reset(DeviceState *dev)
 {
     DeviceClass *klass = DEVICE_GET_CLASS(dev);
@@ -684,6 +694,7 @@ static TypeInfo device_type_info = {
     .instance_size = sizeof(DeviceState),
     .instance_init = device_initfn,
     .instance_finalize = device_finalize,
+    .class_base_init = device_class_base_init,
     .abstract = true,
     .class_size = sizeof(DeviceClass),
 };
-- 
1.7.9.3





reply via email to

[Prev in Thread] Current Thread [Next in Thread]