broadway: Plug another leak
authorEmmanuele Bassi <ebassi@gnome.org>
Tue, 26 Sep 2023 13:40:37 +0000 (14:40 +0100)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 28 Sep 2023 00:42:45 +0000 (20:42 -0400)
When getting a colorized texture we're downloading the texture as a
Cairo surface, and then feeding it to another texture, but we never drop
the reference of the new surface.

gsk/broadway/gskbroadwayrenderer.c

index f32e1e165e930f9ce5c481c8dbcee0650c182adc..6ea711ffea0d4bf24614030be58ad48128c244a8 100644 (file)
@@ -451,7 +451,7 @@ get_colorized_texture (GdkTexture *texture,
                        const graphene_matrix_t *color_matrix,
                        const graphene_vec4_t *color_offset)
 {
-  cairo_surface_t *surface = gdk_texture_download_surface (texture);
+  cairo_surface_t *surface;
   cairo_surface_t *image_surface;
   graphene_vec4_t pixel;
   guint32* pixel_data;
@@ -473,6 +473,7 @@ get_colorized_texture (GdkTexture *texture,
         return g_object_ref (colorized->texture);
     }
 
+  surface = gdk_texture_download_surface (texture);
   image_surface = cairo_surface_map_to_image (surface, NULL);
   data = cairo_image_surface_get_data (image_surface);
   width = cairo_image_surface_get_width (image_surface);
@@ -534,6 +535,8 @@ get_colorized_texture (GdkTexture *texture,
                               colorized_list, (GDestroyNotify)colorized_texture_free_list);
     }
 
+  cairo_surface_destroy (surface);
+
   return colorized_texture;
 }