Eric Blake <ebl...@redhat.com> 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: qemu-sta...@nongnu.org > Signed-off-by: Eric Blake <ebl...@redhat.com> > --- > 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!