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