qemu-stable
[Top][All Lists]
Advanced

[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!



reply via email to

[Prev in Thread] Current Thread [Next in Thread]