qemu-arm
[Top][All Lists]
Advanced

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

Re: [PATCH] hw/arm/cubieboard: make sure SOC object isn't leaked


From: Niek Linnenbank
Subject: Re: [PATCH] hw/arm/cubieboard: make sure SOC object isn't leaked
Date: Thu, 5 Mar 2020 21:07:08 +0100

Hi Igor,

On Tue, Mar 3, 2020 at 10:13 AM Igor Mammedov <address@hidden> wrote:
SOC object returned by object_new() is leaked in current code.
Set SOC parent explicitly to board and then unref to SOC object
to make sure that refererence returned by object_new() is taken
care of.

The SOC object will be kept alive by its parent (machine) and
will be automatically freed when MachineState is destroyed.

Thanks for reporting this issue. In the Allwinner H3 series, I actually inherited this pattern as well,
so I'll include this fix as well in the next version of that series.
 

Signed-off-by: Igor Mammedov <address@hidden>
Reported-by: Andrew Jones <address@hidden>
---
 hw/arm/cubieboard.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/hw/arm/cubieboard.c b/hw/arm/cubieboard.c
index 089f9a30c1..12f8ac798d 100644
--- a/hw/arm/cubieboard.c
+++ b/hw/arm/cubieboard.c
@@ -30,9 +30,14 @@ static struct arm_boot_info cubieboard_binfo = {

 static void cubieboard_init(MachineState *machine)
 {
-    AwA10State *a10 = AW_A10(object_new(TYPE_AW_A10));
+    AwA10State *a10;
     Error *err = NULL;

+    a10 = AW_A10(object_new(TYPE_AW_A10));
+    object_property_add_child(OBJECT(machine), "soc", OBJECT(a10),
+                              &error_abort);
+    object_unref(OBJECT(a10));

I see that there are a few machines which also do object_property_add_child() to add its
SoC object to the machine, but they do not do the object_unref(). Can you explain why it is needed here?
Or do the other machines still have a leak due to the missing object_unref()? Examples are:
  hw/arm/sabrelite.c
  hw/arm/mcimx7d-sabre.c
  hw/arm/mcimx6ul-evk.c

Regards,
Niek
 
+
     object_property_set_int(OBJECT(&a10->emac), 1, "phy-addr", &err);
     if (err != NULL) {
         error_reportf_err(err, "Couldn't set phy address: ");
--
2.18.1




--
Niek Linnenbank


reply via email to

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