On 4/29/25 10:03 AM, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> Fix a memory leak, and allow it to be called multiple times safely.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> hw/core/qdev-properties.c | 15 ++++++++-------
> 1 file changed, 8 insertions(+), 7 deletions(-)
>
> diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
> index bad111833c..7a53c85887 100644
> --- a/hw/core/qdev-properties.c
> +++ b/hw/core/qdev-properties.c
> @@ -620,15 +620,16 @@ static void release_prop_array(Object *obj, const char *name, void *opaque)
> char *elem = *arrayptr;
> int i;
>
> - if (!prop->arrayinfo->release) {
> - return;
> + if (prop->arrayinfo->release) {
> + for (i = 0; i < *alenptr; i++) {
> + Property elem_prop = array_elem_prop(obj, prop, name, elem);
> + prop->arrayinfo->release(obj, NULL, &elem_prop);
> + elem += prop->arrayfieldsize;
> + }
> }
>
> - for (i = 0; i < *alenptr; i++) {
> - Property elem_prop = array_elem_prop(obj, prop, name, elem);
> - prop->arrayinfo->release(obj, NULL, &elem_prop);
> - elem += prop->arrayfieldsize;
> - }
> + *alenptr = 0;
> + g_clear_pointer(arrayptr, g_free);
> }
>
> /*
Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>