]> git.sesse.net Git - vlc/commitdiff
vout: fix memory leaks
authorHannes Domani <ssbssa@yahoo.de>
Mon, 1 Sep 2014 20:00:38 +0000 (23:00 +0300)
committerRémi Denis-Courmont <remi@remlab.net>
Mon, 1 Sep 2014 20:19:14 +0000 (23:19 +0300)
In combination with the previous patch all crashes (double free()) are solved.

Signed-off-by: Rémi Denis-Courmont <remi@remlab.net>
src/video_output/display.c
src/video_output/video_output.c

index 547bc2e5aa5b96d2bbddb186e743faadd0e08115..614f4d41c50df2b79c04be087a1d2b531908eb2a 100644 (file)
@@ -133,6 +133,9 @@ static void vout_display_Delete(vout_display_t *vd)
     if (vd->module)
         module_unneed(vd, vd->module);
 
+    video_format_Clean(&vd->source);
+    video_format_Clean(&vd->fmt);
+
     vlc_object_release(vd);
 }
 
@@ -467,19 +470,20 @@ static void VoutDisplayCreateRender(vout_display_t *vd)
     es_format_InitFromVideo(&src, &v_src);
 
     /* */
-    es_format_t dst;
-
     filter_t *filter;
     for (int i = 0; i < 1 + (v_dst_cmp.i_chroma != v_dst.i_chroma); i++) {
+        es_format_t dst;
 
         es_format_InitFromVideo(&dst, i == 0 ? &v_dst : &v_dst_cmp);
 
         filter_chain_Reset(osys->filters, &src, &dst);
         filter = filter_chain_AppendFilter(osys->filters,
                                            NULL, NULL, &src, &dst);
+        es_format_Clean(&dst);
         if (filter)
             break;
     }
+    es_format_Clean(&src);
     if (!filter)
         msg_Err(vd, "Failed to adapt decoder format to display");
 }
index 7535a232f7a8447f9856d3702517228ed90bd78b..3f094d479bd0f010b6df356c4529b5dec56e2f82 100644 (file)
@@ -795,6 +795,8 @@ static void ThreadChangeFilters(vout_thread_t *vout,
         }
     }
 
+    es_format_Clean(&fmt_target);
+
     if (vout->p->filter.configuration != filters) {
         free(vout->p->filter.configuration);
         vout->p->filter.configuration = filters ? strdup(filters) : NULL;