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: Changlong Xie
Subject: Re: [Qemu-stable] [Qemu-devel] [PATCH] json-streamer: Don't leak tokens on incomplete parse
Date: Mon, 4 Jul 2016 15:35:35 +0800
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0

On 05/19/2016 05:46 AM, Eric Blake wrote:
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.

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;
      }


It seems this commit make tests/qemu-iotests/071 failed on the last master branch.







reply via email to

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