[vlc-commits] vout: fix memory leaks

Hannes Domani git at videolan.org
Mon Sep 1 22:40:47 CEST 2014


vlc/vlc-2.2 | branch: master | Hannes Domani <ssbssa at yahoo.de> | Mon Sep  1 23:00:38 2014 +0300| [f2bbb58bccd05e5c47df581120dd7126878b5727] | committer: Rémi Denis-Courmont

vout: fix memory leaks

In combination with the previous patch all crashes (double free()) are solved.

Signed-off-by: Rémi Denis-Courmont <remi at remlab.net>
(cherry picked from commit 1651d75c07ae1795cf78b0e3e4ac753b7703a8e6)

> http://git.videolan.org/gitweb.cgi/vlc/vlc-2.2.git/?a=commit;h=f2bbb58bccd05e5c47df581120dd7126878b5727
---

 src/video_output/display.c      |    8 ++++++--
 src/video_output/video_output.c |    2 ++
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/video_output/display.c b/src/video_output/display.c
index 4b85f0c..e2b57ea 100644
--- a/src/video_output/display.c
+++ b/src/video_output/display.c
@@ -147,6 +147,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);
 }
 
@@ -475,19 +478,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");
 }
diff --git a/src/video_output/video_output.c b/src/video_output/video_output.c
index 18f22ce..8de262a 100644
--- a/src/video_output/video_output.c
+++ b/src/video_output/video_output.c
@@ -806,6 +806,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;



More information about the vlc-commits mailing list