From: Fabiano Rosas <farosas@suse.de>
To: Thomas Huth <thuth@redhat.com>, qemu-devel@nongnu.org
Cc: Laurent Vivier <lvivier@redhat.com>, Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [PATCH] tests/qtest: Plug memory leaks in qtest_get_machines
Date: Mon, 23 Jan 2023 10:32:54 -0300 [thread overview]
Message-ID: <877cxdcr5l.fsf@suse.de> (raw)
In-Reply-To: <77fcbf0a-0f9a-d3bc-c1cf-0ec3e21399c9@redhat.com>
Thomas Huth <thuth@redhat.com> writes:
> On 20/01/2023 20.44, Fabiano Rosas wrote:
>> These leaks can be avoided:
>>
>> 759 bytes in 61 blocks are still reachable in loss record 56 of 60
>> at 0x4034744: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
>> by 0x4A88518: g_malloc (in /usr/lib64/libglib-2.0.so.0.7000.5)
>> by 0x4AA313E: g_strdup (in /usr/lib64/libglib-2.0.so.0.7000.5)
>> by 0x12083E: qtest_get_machines (libqtest.c:1323)
>> by 0x12098C: qtest_cb_for_every_machine (libqtest.c:1348)
>> by 0x11556C: main (test-hmp.c:160)
>>
>> 992 bytes in 1 blocks are still reachable in loss record 57 of 60
>> at 0x4034744: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
>> by 0x4A88518: g_malloc (in /usr/lib64/libglib-2.0.so.0.7000.5)
>> by 0x120725: qtest_get_machines (libqtest.c:1313)
>> by 0x12098C: qtest_cb_for_every_machine (libqtest.c:1348)
>> by 0x11556C: main (test-hmp.c:160)
>>
>> Signed-off-by: Fabiano Rosas <farosas@suse.de>
>> ---
>> tests/qtest/libqtest.c | 14 ++++++++++++++
>> 1 file changed, 14 insertions(+)
>>
>> diff --git a/tests/qtest/libqtest.c b/tests/qtest/libqtest.c
>> index 6b2216cb20..65abac5029 100644
>> --- a/tests/qtest/libqtest.c
>> +++ b/tests/qtest/libqtest.c
>> @@ -1285,6 +1285,18 @@ struct MachInfo {
>> char *alias;
>> };
>>
>> +static void qtest_free_machine_info(gpointer data)
>> +{
>> + struct MachInfo *machines = data;
>> + int i;
>> +
>> + for (i = 0; machines[i].name != NULL; i++) {
>> + g_free((void *)machines[i].name); > + g_free((void *)machines[i].alias);
>
> I'd suggest setting .name and .alias to NULL after freeing them, to avoid
> that danling pointers are left behind.
>
>> + }
>> + g_free(machines);
>> +}
>> +
>> /*
>> * Returns an array with pointers to the available machine names.
>> * The terminating entry has the name set to NULL.
>> @@ -1336,6 +1348,8 @@ static struct MachInfo *qtest_get_machines(void)
>> qobject_unref(response);
>>
>> memset(&machines[idx], 0, sizeof(struct MachInfo)); /* Terminating entry */
>> + g_test_queue_destroy(qtest_free_machine_info, machines);
>
> So this frees the machines structure...
>
>> return machines;
>
> ... but here it gets returned, too? ... that looks wrong. Did you maybe
> rather want to free it at the end of qtest_cb_for_every_machine() and
> qtest_has_machine ?
g_test_queue_destroy will only call qtest_free_machine_info during the
test teardown phase:
#0 qtest_free_machine_info (data=0x555555677870) at ../tests/qtest/libqtest.c:1289
#1 0x00007ffff7b1d9d1 in ?? () from /usr/lib64/libglib-2.0.so.0
#2 0x00007ffff7b1d8b3 in ?? () from /usr/lib64/libglib-2.0.so.0
#3 0x00007ffff7b1d8b3 in ?? () from /usr/lib64/libglib-2.0.so.0
#4 0x00007ffff7b1de82 in g_test_run_suite () from /usr/lib64/libglib-2.0.so.0
#5 0x00007ffff7b1deab in g_test_run () from /usr/lib64/libglib-2.0.so.0
#6 0x0000555555561221 in main (argc=<optimized out>, argv=<optimized
#out>) at ../tests/qtest/qom-test.c:12
As long as 'machines' is static and not being exposed to the tests, I
think this should be fine.
next prev parent reply other threads:[~2023-01-23 13:34 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-20 19:44 [PATCH] tests/qtest: Plug memory leaks in qtest_get_machines Fabiano Rosas
2023-01-23 7:55 ` Thomas Huth
2023-01-23 13:32 ` Fabiano Rosas [this message]
2023-01-23 19:49 ` Thomas Huth
2023-01-23 21:22 ` Fabiano Rosas
2023-01-24 7:25 ` Thomas Huth
2023-01-24 12:45 ` Fabiano Rosas
2023-01-24 13:04 ` Thomas Huth
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=877cxdcr5l.fsf@suse.de \
--to=farosas@suse.de \
--cc=lvivier@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=thuth@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.