summaryrefslogtreecommitdiffstats
path: root/libass/ass_font.c
diff options
context:
space:
mode:
authorDr.Smile <vabnick@gmail.com>2015-09-19 03:08:29 +0300
committerDr.Smile <vabnick@gmail.com>2016-06-30 23:13:53 +0300
commit96601ede589799cb84cec4a616467c9e08412509 (patch)
tree7ccafe0cd9a325d23c6f4aeb7a5645518262ab9f /libass/ass_font.c
parent954c0163a7c7669c0c54527d4fe66745a0f572ef (diff)
downloadlibass-96601ede589799cb84cec4a616467c9e08412509.tar.bz2
libass-96601ede589799cb84cec4a616467c9e08412509.tar.xz
cache: keep ref_count of all active objects nonzero
Diffstat (limited to 'libass/ass_font.c')
-rw-r--r--libass/ass_font.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/libass/ass_font.c b/libass/ass_font.c
index d9dc7ba..5889b49 100644
--- a/libass/ass_font.c
+++ b/libass/ass_font.c
@@ -229,8 +229,12 @@ ASS_Font *ass_font_new(Cache *font_cache, ASS_Library *library,
ASS_FontDesc *desc)
{
ASS_Font *font;
- if (ass_cache_get(font_cache, desc, &font))
- return font->desc.family ? font : NULL;
+ if (ass_cache_get(font_cache, desc, &font)) {
+ if (font->desc.family)
+ return font;
+ ass_cache_dec_ref(font);
+ return NULL;
+ }
if (!font)
return NULL;
@@ -238,7 +242,7 @@ ASS_Font *ass_font_new(Cache *font_cache, ASS_Library *library,
font->ftlibrary = ftlibrary;
font->shaper_priv = NULL;
font->n_faces = 0;
- ASS_FontDesc *new_desc = ass_cache_get_key(font);
+ ASS_FontDesc *new_desc = ass_cache_key(font);
font->desc.family = new_desc->family;
font->desc.bold = desc->bold;
font->desc.italic = desc->italic;
@@ -252,6 +256,7 @@ ASS_Font *ass_font_new(Cache *font_cache, ASS_Library *library,
if (error == -1) {
font->desc.family = NULL;
ass_cache_commit(font, 1);
+ ass_cache_dec_ref(font);
return NULL;
}
ass_cache_commit(font, 1);