From f4281e0a92a40746fa630fb15b877adaf3ff15b1 Mon Sep 17 00:00:00 2001
From: Behdad Esfahbod <behdad@behdad.org>
Date: Thu, 5 Nov 2009 17:58:41 -0500
Subject: [PATCH] Fix ref counting

---
 src/hb-ft.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/src/hb-ft.c b/src/hb-ft.c
index 8a062c767..eecafef38 100644
--- a/src/hb-ft.c
+++ b/src/hb-ft.c
@@ -182,16 +182,16 @@ hb_face_t *
 hb_ft_face_create_cached (FT_Face ft_face)
 {
   /* TODO: Not thread-safe */
-  if (HB_LIKELY (ft_face->generic.data && ft_face->generic.finalizer == (FT_Generic_Finalizer) hb_face_destroy))
-      return ft_face->generic.data;
+  if (!HB_LIKELY (ft_face->generic.data && ft_face->generic.finalizer == (FT_Generic_Finalizer) hb_face_destroy))
+  {
+    if (ft_face->generic.finalizer)
+      ft_face->generic.finalizer (ft_face->generic.data);
 
-  if (ft_face->generic.finalizer)
-    ft_face->generic.finalizer (ft_face->generic.data);
+    ft_face->generic.data = hb_ft_face_create (ft_face, NULL);
+    ft_face->generic.finalizer = (FT_Generic_Finalizer) hb_face_destroy;
+  }
 
-  ft_face->generic.data = hb_ft_face_create (ft_face, NULL);
-  ft_face->generic.finalizer = (FT_Generic_Finalizer) hb_face_destroy;
-
-  return ft_face->generic.data;
+  return hb_face_reference (ft_face->generic.data);
 }