qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH 01/16] qdev: fix hot-unplug


From: Anthony Liguori
Subject: Re: [Qemu-devel] [PATCH 01/16] qdev: fix hot-unplug
Date: Fri, 03 Feb 2012 08:27:33 -0600
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.23) Gecko/20110922 Lightning/1.0b2 Thunderbird/3.1.15

On 02/02/2012 10:45 AM, Paolo Bonzini wrote:
The reference that is returned by qdev_device_add is never given
back, so that device_del does not cause the refcount to go to zero
(and thus does nothing).

Signed-off-by: Paolo Bonzini<address@hidden>

This isn't needed in qom-upstream.14.  Here's why:

object_init does not increase the reference count

object_property_add_child increases the reference count
object_new increases the reference count

object_delete decrements the reference count
object_property_del_child decreases the reference count

object_delete calls object_property_del_child(obj->parent, obj)

qdev_device_add calls object_new and object_property_add_child
 -> ref == 2

qdev_device_del calls object_delete
 -> ref -= 2

In qom-upstream.13, object_delete wasn't calling object_property_del_child which is why you saw the behavior you did. This problem would still exist with a composed device so dropping the reference here isn't enough.

Regards,

Anthony Liguori

---
  vl.c |    1 +
  1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/vl.c b/vl.c
index d88a18c..c63af69 100644
--- a/vl.c
+++ b/vl.c
@@ -1746,6 +1746,7 @@ static int device_init_func(QemuOpts *opts, void *opaque)
      dev = qdev_device_add(opts);
      if (!dev)
          return -1;
+    object_unref(OBJECT(dev));
      return 0;
  }





reply via email to

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