Plug a memory leak in gsk_render_node_serialize
authorMatthias Clasen <mclasen@redhat.com>
Wed, 28 Jun 2023 01:40:22 +0000 (21:40 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Wed, 28 Jun 2023 01:43:17 +0000 (21:43 -0400)
This was introduced in 0d6a6a5997d with named
textures.

gsk/gskrendernodeparser.c

index fc1e1cd4220437b58cc89f1c868a00e19e145d28..ea54470c8cdea3ee1fccea00fd8b00fa25c52241 100644 (file)
@@ -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;
 }