]> xenbits.xensource.com Git - qemu-xen.git/commitdiff
spapr: drop reference on child object during core realization
authorGreg Kurz <groug@kaod.org>
Wed, 29 Jun 2016 20:50:20 +0000 (22:50 +0200)
committerDavid Gibson <david@gibson.dropbear.id.au>
Fri, 1 Jul 2016 03:41:47 +0000 (13:41 +1000)
When a core is being realized, we create a child object for each thread
of the core.

The child is first initialized with object_initialize() which sets its ref
count to 1, and then added to the core with object_property_add_child()
which bumps the ref count to 2.

When the core gets released, object_unparent() decreases the ref count to 1,
and we g_free() the object: we hence loose the reference on an unfinalized
object. This is likely to cause random crashes.

Let's drop the extra reference as soon as we don't need it, after the
thread is added to the core.

Signed-off-by: Greg Kurz <groug@kaod.org>
Reviewed-by: Bharata B Rao <bharata@linux.vnet.ibm.com>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
hw/ppc/spapr_cpu_core.c

index e30b15975b8c7a8d6a367f04b304813c63853b34..bba361226255f79a6ead9cf23005996035c35747 100644 (file)
@@ -300,6 +300,7 @@ static void spapr_cpu_core_realize(DeviceState *dev, Error **errp)
         if (local_err) {
             goto err;
         }
+        object_unref(obj);
     }
     object_child_foreach(OBJECT(dev), spapr_cpu_core_realize_child, &local_err);
     if (local_err) {