From 4ebb07452a0d5026dc9b21c95d76ab757ae41c48 Mon Sep 17 00:00:00 2001 From: Grigori Goronzy Date: Thu, 16 Jul 2009 20:57:39 +0200 Subject: Clear free list on renderer uninit The vector clip support introduced a free list that gets freed on every new frame. Factor out the code for freeing it into a separate function and make sure it is called when uniniting the ass_renderer. --- libass/ass_render.c | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/libass/ass_render.c b/libass/ass_render.c index 9e96345..df4e74c 100644 --- a/libass/ass_render.c +++ b/libass/ass_render.c @@ -335,6 +335,20 @@ ass_renderer_t *ass_renderer_init(ass_library_t *library) return priv; } +static void free_list_clear(ass_renderer_t *render_priv) +{ + if (render_priv->free_head) { + free_list_t *item = render_priv->free_head; + while(item) { + free_list_t *oi = item; + free(item->object); + item = item->next; + free(oi); + } + render_priv->free_head = NULL; + } +} + void ass_renderer_done(ass_renderer_t *render_priv) { ass_font_cache_done(render_priv->cache.font_cache); @@ -359,6 +373,8 @@ void ass_renderer_done(ass_renderer_t *render_priv) free(render_priv->settings.default_font); free(render_priv->settings.default_family); + + free_list_clear(render_priv); } /** @@ -3203,17 +3219,7 @@ ass_start_frame(ass_renderer_t *render_priv, ass_track_t *track, if (render_priv->library != track->library) return 1; - // Clear the list of object to be freed. - if (render_priv->free_head) { - free_list_t *item = render_priv->free_head; - while(item) { - free_list_t *oi = item; - free(item->object); - item = item->next; - free(oi); - } - render_priv->free_head = NULL; - } + free_list_clear(render_priv); ass_settings_t *settings_priv = &render_priv->settings; -- cgit v1.2.3