From 1d4c5a496b8b6d21c20ccb7598216195069f346e Mon Sep 17 00:00:00 2001 From: =?utf8?q?S=C3=A9bastien=20Escudier?= Date: Tue, 22 Jun 2010 15:25:37 +0200 Subject: [PATCH] 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. --- modules/demux/live555.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) 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 ); -- 2.39.2