[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] qom-test: fix qmp() leaks
From: |
Markus Armbruster |
Subject: |
Re: [Qemu-devel] [PATCH] qom-test: fix qmp() leaks |
Date: |
Wed, 02 Dec 2015 19:50:42 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux) |
address@hidden writes:
> From: Marc-André Lureau <address@hidden>
>
> Before this patch ASAN reported:
> SUMMARY: AddressSanitizer: 677165875 byte(s) leaked in 1272437 allocation(s)
>
> After this patch:
> SUMMARY: AddressSanitizer: 465 byte(s) leaked in 32 allocation(s)
>
> Signed-off-by: Marc-André Lureau <address@hidden>
> ---
> tests/qom-test.c | 25 ++++++++++++++++---------
> 1 file changed, 16 insertions(+), 9 deletions(-)
>
> diff --git a/tests/qom-test.c b/tests/qom-test.c
> index fde04e7..8a08fd7 100644
> --- a/tests/qom-test.c
> +++ b/tests/qom-test.c
> @@ -47,7 +47,7 @@ static bool is_blacklisted(const char *arch, const char
> *mach)
> static void test_properties(const char *path, bool recurse)
> {
> char *child_path;
> - QDict *response, *tuple;
> + QDict *response, *tuple, *tmp;
> QList *list;
> QListEntry *entry;
>
> @@ -57,6 +57,7 @@ static void test_properties(const char *path, bool recurse)
> g_assert(response);
>
> if (!recurse) {
> + QDECREF(response);
> return;
> }
>
> @@ -75,19 +76,21 @@ static void test_properties(const char *path, bool
> recurse)
> } else {
> const char *prop = qdict_get_str(tuple, "name");
> g_test_message("Testing property %s.%s", path, prop);
> - response = qmp("{ 'execute': 'qom-get',"
> - " 'arguments': { 'path': %s,"
> - " 'property': %s } }",
> - path, prop);
> + tmp = qmp("{ 'execute': 'qom-get',"
> + " 'arguments': { 'path': %s,"
> + " 'property': %s } }",
> + path, prop);
> /* qom-get may fail but should not, e.g., segfault. */
> - g_assert(response);
> + g_assert(tmp);
> + QDECREF(tmp);
> }
> }
> + QDECREF(response);
> }
>
> -static void test_machine(gconstpointer data)
> +static void test_machine(gpointer data)
> {
> - const char *machine = data;
> + char *machine = data;
> char *args;
> QDict *response;
>
Why drop const?
> @@ -98,9 +101,11 @@ static void test_machine(gconstpointer data)
>
> response = qmp("{ 'execute': 'quit' }");
> g_assert(qdict_haskey(response, "return"));
> + QDECREF(response);
>
> qtest_end();
> g_free(args);
> + g_free(machine);
Hmm, I guess so you can g_free() without a cast.
> }
>
> static void add_machine_test_cases(void)
> @@ -129,10 +134,12 @@ static void add_machine_test_cases(void)
> mname = qstring_get_str(qstr);
> if (!is_blacklisted(arch, mname)) {
> path = g_strdup_printf("qom/%s", mname);
> - qtest_add_data_func(path, mname, test_machine);
> + qtest_add_data_func(path, g_strdup(mname), test_machine);
I wonder why changing test_machine()'s type doesn't make the compiler
gripe here... argh!
void qtest_add_data_func(const char *str, const void *data, void (*fn));
void (*fn) is just a stupid way to write void *fn. Bye-bye
type-checking.
I'll post a patch fixing this.
> }
> }
> +
> qtest_end();
> + QDECREF(response);
> }
>
> int main(int argc, char **argv)
Reviewed-by: Markus Armbruster <address@hidden>
I intend to rebase this patch onto mine. Changes should be trivial,
though.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [Qemu-devel] [PATCH] qom-test: fix qmp() leaks,
Markus Armbruster <=