[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-stable] [Qemu-devel] [PATCH] json-streamer: Don't leak tokens
From: |
Markus Armbruster |
Subject: |
Re: [Qemu-stable] [Qemu-devel] [PATCH] json-streamer: Don't leak tokens on incomplete parse |
Date: |
Tue, 31 May 2016 15:45:18 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux) |
Eric Blake <address@hidden> writes:
> Valgrind complained about a number of leaks in
> tests/check-qobject-json:
>
> ==12657== definitely lost: 17,247 bytes in 1,234 blocks
>
> All of which had the same root cause: on an incomplete parse,
> we were abandoning the token queue without cleaning up the
> allocated data within each queue element. Introduced in
> commit 95385fe, when we switched from QList (which recursively
> frees contents) to g_queue (which does not).
>
> We don't yet require glib 2.32 with its g_queue_free_full(),
> so open-code it instead.
Should we add a replacement g_queue_free_full() to glib-compat.h?
> CC: address@hidden
> Signed-off-by: Eric Blake <address@hidden>
> ---
> qobject/json-streamer.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/qobject/json-streamer.c b/qobject/json-streamer.c
> index 0251685..7164390 100644
> --- a/qobject/json-streamer.c
> +++ b/qobject/json-streamer.c
> @@ -20,9 +20,15 @@
> #define MAX_TOKEN_COUNT (2ULL << 20)
> #define MAX_NESTING (1ULL << 10)
>
> +static void json_message_free_token(void *token, void *opaque)
> +{
> + g_free(token);
> +}
> +
> static void json_message_free_tokens(JSONMessageParser *parser)
> {
> if (parser->tokens) {
> + g_queue_foreach(parser->tokens, json_message_free_token, NULL);
> g_queue_free(parser->tokens);
> parser->tokens = NULL;
> }
Since open-coding is a one-liner, I'm okay with it.
Applied to my qapi-next branch, thanks!