From d2f1667cd54e131050b29b4d44c106db5a2132be Mon Sep 17 00:00:00 2001 From: Michal Sudolsky Date: Mon, 23 Nov 2020 19:55:07 +0100 Subject: [PATCH 1/2] fix usage of FT_Face after FT_Done_Face --- src/cairo-ft-font.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/cairo-ft-font.c b/src/cairo-ft-font.c index d2221edec..1f9d1a965 100644 --- a/src/cairo-ft-font.c +++ b/src/cairo-ft-font.c @@ -712,14 +712,18 @@ _cairo_ft_unscaled_font_lock_face (cairo_ft_unscaled_font_t *unscaled) CAIRO_MUTEX_LOCK (unscaled->mutex); unscaled->lock_count++; + font_map = _cairo_ft_unscaled_font_map_lock (); + if (unscaled->face) + { + _cairo_ft_unscaled_font_map_unlock (); return unscaled->face; + } /* If this unscaled font was created from an FT_Face then we just * returned it above. */ assert (!unscaled->from_face); - font_map = _cairo_ft_unscaled_font_map_lock (); { assert (font_map != NULL); From c70c98ee231bf3ac0045937bf5ce76481015ec78 Mon Sep 17 00:00:00 2001 From: Michal Sudolsky Date: Mon, 23 Nov 2020 19:57:18 +0100 Subject: [PATCH 2/2] sync access to FT_Library and num_open_faces --- src/cairo-ft-font.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/cairo-ft-font.c b/src/cairo-ft-font.c index 1f9d1a965..fecad9342 100644 --- a/src/cairo-ft-font.c +++ b/src/cairo-ft-font.c @@ -739,7 +739,6 @@ _cairo_ft_unscaled_font_lock_face (cairo_ft_unscaled_font_t *unscaled) _font_map_release_face_lock_held (font_map, entry); } } - _cairo_ft_unscaled_font_map_unlock (); error = FT_New_Face (font_map->ft_library, unscaled->filename, @@ -747,6 +746,7 @@ _cairo_ft_unscaled_font_lock_face (cairo_ft_unscaled_font_t *unscaled) &face); if (error) { + _cairo_ft_unscaled_font_map_unlock (); unscaled->lock_count--; CAIRO_MUTEX_UNLOCK (unscaled->mutex); _cairo_error_throw (_ft_to_cairo_error (error)); @@ -760,6 +760,8 @@ _cairo_ft_unscaled_font_lock_face (cairo_ft_unscaled_font_t *unscaled) font_map->num_open_faces++; + _cairo_ft_unscaled_font_map_unlock (); + return face; }