From bf652edbf793c725ef70fa65e4bc074e76a95b49 Mon Sep 17 00:00:00 2001 From: Raman Varabets Date: Sun, 2 Jun 2024 19:35:06 +0800 Subject: [PATCH] Free color glyphs hash table when SVG surface is destroyed Signed-off-by: Raman Varabets --- src/cairo-svg-surface.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/cairo-svg-surface.c b/src/cairo-svg-surface.c index 3f08205f1..87f8c9721 100644 --- a/src/cairo-svg-surface.c +++ b/src/cairo-svg-surface.c @@ -147,6 +147,18 @@ _cairo_svg_source_surface_pluck (void *entry, void *closure) free (source_surface); } +static void +_cairo_svg_color_glyph_pluck (void *entry, void *closure) +{ + cairo_svg_color_glyph_t *glyph_entry = entry; + cairo_hash_table_t *patterns = closure; + + _cairo_hash_table_remove (patterns, &glyph_entry->base); + cairo_scaled_font_destroy (glyph_entry->scaled_font); + + free (glyph_entry); +} + static void _cairo_svg_paint_init_key (cairo_svg_paint_t *paint) { @@ -1744,6 +1756,11 @@ _cairo_svg_surface_finish (void *abstract_surface) _cairo_hash_table_foreach (surface->source_surfaces, _cairo_svg_source_surface_pluck, surface->source_surfaces); _cairo_hash_table_destroy (surface->source_surfaces); + _cairo_hash_table_foreach (surface->color_glyphs, + _cairo_svg_color_glyph_pluck, + surface->color_glyphs); + _cairo_hash_table_destroy (surface->color_glyphs); + status = _cairo_svg_document_destroy (surface->document); if (final_status == CAIRO_STATUS_SUCCESS) { final_status = status;