[vlc-commits] stream_filter: smooth: fix memleaks

Francois Cartegnie git at videolan.org
Thu May 1 17:25:47 CEST 2014


vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Thu May  1 17:06:58 2014 +0200| [059529abf620aa7a0ab30223cfe8e381c70ee08c] | committer: Francois Cartegnie

stream_filter: smooth: fix memleaks

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

 modules/stream_filter/smooth/smooth.c |   49 +++++++++++++++++----------------
 1 file changed, 25 insertions(+), 24 deletions(-)

diff --git a/modules/stream_filter/smooth/smooth.c b/modules/stream_filter/smooth/smooth.c
index cf268fe..7287c2b 100644
--- a/modules/stream_filter/smooth/smooth.c
+++ b/modules/stream_filter/smooth/smooth.c
@@ -404,6 +404,26 @@ static int parse_Manifest( stream_t *s )
     return VLC_SUCCESS;
 }
 
+static void SysCleanup( stream_sys_t *p_sys )
+{
+    if ( p_sys->sms_streams )
+    {
+        for ( int i=0; i< p_sys->sms_streams->i_count ; i++ )
+            sms_Free( p_sys->sms_streams->pp_elems[i] );
+        vlc_array_destroy( p_sys->sms_streams );
+    }
+    vlc_array_destroy( p_sys->selected_st );
+    vlc_array_destroy( p_sys->download.chunks );
+    if ( p_sys->init_chunks )
+    {
+        for ( int i=0; i< p_sys->init_chunks->i_count ; i++ )
+            chunk_Free( p_sys->init_chunks->pp_elems[i] );
+        vlc_array_destroy( p_sys->init_chunks );
+    }
+    sms_queue_free( p_sys->bws );
+    free( p_sys->base_url );
+}
+
 static int Open( vlc_object_t *p_this )
 {
     stream_t *s = (stream_t*)p_this;
@@ -440,6 +460,7 @@ static int Open( vlc_object_t *p_this )
     if( unlikely( !p_sys->sms_streams || !p_sys->download.chunks ||
                   !p_sys->selected_st || !p_sys->init_chunks ) )
     {
+        SysCleanup( p_sys );
         free( p_sys );
         return VLC_ENOMEM;
     }
@@ -447,6 +468,7 @@ static int Open( vlc_object_t *p_this )
     /* Parse SMS ismc content. */
     if( parse_Manifest( s ) != VLC_SUCCESS )
     {
+        SysCleanup( p_sys );
         free( p_sys );
         return VLC_EGENERIC;
     }
@@ -497,9 +519,10 @@ static int Open( vlc_object_t *p_this )
 
     if( vlc_clone( &p_sys->thread, sms_Thread, s, VLC_THREAD_PRIORITY_INPUT ) )
     {
-        free( p_sys );
+        SysCleanup( p_sys );
         vlc_mutex_destroy( &p_sys->download.lock_wait );
         vlc_cond_destroy( &p_sys->download.wait );
+        free( p_sys );
         return VLC_EGENERIC;
     }
 
@@ -524,29 +547,7 @@ static void Close( vlc_object_t *p_this )
     vlc_mutex_destroy( &p_sys->download.lock_wait );
     vlc_cond_destroy( &p_sys->download.wait );
 
-    /* Free sms streams */
-    sms_stream_t *sms;
-    for( int i = 0; i < vlc_array_count( p_sys->sms_streams ); i++ )
-    {
-        sms = vlc_array_item_at_index( p_sys->sms_streams, i );
-        if( sms )
-            sms_Free( sms );
-    }
-    /* Free downloaded chunks */
-    chunk_t *chunk;
-    for( int i = 0; i < vlc_array_count( p_sys->init_chunks ); i++ )
-    {
-        chunk = vlc_array_item_at_index( p_sys->init_chunks, i );
-        chunk_Free( chunk );
-    }
-
-    sms_queue_free( p_sys->bws );
-    vlc_array_destroy( p_sys->sms_streams );
-    vlc_array_destroy( p_sys->selected_st );
-    vlc_array_destroy( p_sys->download.chunks );
-    vlc_array_destroy( p_sys->init_chunks );
-
-    free( p_sys->base_url );
+    SysCleanup( p_sys );
     free( p_sys );
 }
 



More information about the vlc-commits mailing list