]> granicus.if.org Git - libass/commitdiff
Clear free list on renderer uninit
authorGrigori Goronzy <greg@blackbox>
Thu, 16 Jul 2009 18:57:39 +0000 (20:57 +0200)
committerGrigori Goronzy <greg@blackbox>
Thu, 16 Jul 2009 18:59:20 +0000 (20:59 +0200)
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

index 9e963453ed490d32fd4f6c7dfff4ea0c9c8d9f0a..df4e74c9d3025dc442ad9207bed78ffbb8bb81c5 100644 (file)
@@ -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;