diff options
author | Dr.Smile <vabnick@gmail.com> | 2015-09-19 03:08:29 +0300 |
---|---|---|
committer | Dr.Smile <vabnick@gmail.com> | 2016-06-30 23:13:53 +0300 |
commit | 96601ede589799cb84cec4a616467c9e08412509 (patch) | |
tree | 7ccafe0cd9a325d23c6f4aeb7a5645518262ab9f /libass/ass_font.c | |
parent | 954c0163a7c7669c0c54527d4fe66745a0f572ef (diff) | |
download | libass-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.c | 11 |
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); |