changeset 28206:11d66485fc19 stable

Correctly cache fonts in ft_manager (bug #58150) * ft-text-renderer.cc (ft_manager::do_get_font): Call FT_Reference_Face to increment the FT_Face ref count otherwise any call to FT_Done will make the object be freed and un-cached. (ft_manager::do_font_destroyed): Call FT_Done_Face to decrement the FT_Face ref count.
author Pantxo Diribarne <pantxo.diribarne@gmail.com>
date Sat, 11 Apr 2020 15:57:36 +0200
parents 9a1b6400c706
children ab60e78d235c c3dd445fcc2f
files libinterp/corefcn/ft-text-renderer.cc
diffstat 1 files changed, 3 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/corefcn/ft-text-renderer.cc	Sat Apr 11 20:46:24 2020 +0200
+++ b/libinterp/corefcn/ft-text-renderer.cc	Sat Apr 11 15:57:36 2020 +0200
@@ -398,8 +398,8 @@
               retval->generic.finalizer = ft_face_destroyed;
 
               // Insert loaded font into the cache.
-
-              cache[key] = retval;
+              if (FT_Reference_Face (retval) == 0)
+                cache[key] = retval;
             }
 #endif
         }
@@ -416,6 +416,7 @@
           cache.erase (*pkey);
           delete pkey;
           face->generic.data = nullptr;
+          FT_Done_Face (face);
         }
     }