From: Sébastien Escudier Date: Tue, 22 Jun 2010 13:25:37 +0000 (+0200) Subject: Fix a crash in live555 demuxer on close. X-Git-Tag: 1.2.0-pre1~6094 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=1d4c5a496b8b6d21c20ccb7598216195069f346e;p=vlc Fix a crash in live555 demuxer on close. We must first close the stream before deleting the tracks, because tracks can be used in StreamClose callback. This crash could only happen in recents version of live555 library. --- diff --git a/modules/demux/live555.cpp b/modules/demux/live555.cpp index 5e204c8389..f7033f8572 100644 --- a/modules/demux/live555.cpp +++ b/modules/demux/live555.cpp @@ -422,9 +422,13 @@ static void Close( vlc_object_t *p_this ) { demux_t *p_demux = (demux_t*)p_this; demux_sys_t *p_sys = p_demux->p_sys; - int i; - for( i = 0; i < p_sys->i_track; i++ ) + if( p_sys->rtsp && p_sys->ms ) p_sys->rtsp->teardownMediaSession( *p_sys->ms ); + if( p_sys->ms ) Medium::close( p_sys->ms ); + if( p_sys->rtsp ) RTSPClient::close( p_sys->rtsp ); + if( p_sys->env ) p_sys->env->reclaim(); + + for( int i = 0; i < p_sys->i_track; i++ ) { live_track_t *tk = p_sys->track[i]; @@ -436,16 +440,12 @@ static void Close( vlc_object_t *p_this ) if( p_sys->i_track ) free( p_sys->track ); if( p_sys->p_out_asf ) stream_Delete( p_sys->p_out_asf ); - if( p_sys->rtsp && p_sys->ms ) p_sys->rtsp->teardownMediaSession( *p_sys->ms ); if( p_sys->p_timeout ) { vlc_cancel( p_sys->p_timeout->handle ); vlc_join( p_sys->p_timeout->handle, NULL ); free( p_sys->p_timeout ); } - if( p_sys->ms ) Medium::close( p_sys->ms ); - if( p_sys->rtsp ) RTSPClient::close( p_sys->rtsp ); - if( p_sys->env ) p_sys->env->reclaim(); delete p_sys->scheduler; free( p_sys->p_sdp ); free( p_sys->psz_path );