From 16e46a73f33169dbd6309c1201a6d1839d282be6 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Tue, 27 Jun 2023 21:40:22 -0400 Subject: [PATCH] Plug a memory leak in gsk_render_node_serialize This was introduced in 0d6a6a5997d with named textures. --- gsk/gskrendernodeparser.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/gsk/gskrendernodeparser.c b/gsk/gskrendernodeparser.c index fc1e1cd422..ea54470c8c 100644 --- a/gsk/gskrendernodeparser.c +++ b/gsk/gskrendernodeparser.c @@ -2477,6 +2477,15 @@ printer_init (Printer *self, printer_init_duplicates_for_node (self, node); } +static void +printer_clear (Printer *self) +{ + if (self->str) + g_string_free (self->str, TRUE); + g_hash_table_unref (self->named_nodes); + g_hash_table_unref (self->named_textures); +} + #define IDENT_LEVEL 2 /* Spaces per level */ static void _indent (Printer *self) @@ -3686,6 +3695,7 @@ GBytes * gsk_render_node_serialize (GskRenderNode *node) { Printer p; + GBytes *res; printer_init (&p, node); @@ -3705,5 +3715,9 @@ gsk_render_node_serialize (GskRenderNode *node) render_node_print (&p, node); } - return g_string_free_to_bytes (p.str); + res = g_string_free_to_bytes (g_steal_pointer (&p.str)); + + printer_clear (&p); + + return res; } -- 2.30.2