vlc | branch: master | Thomas Guillem <[email protected]> | Wed Mar 18 09:16:44 2015 +0000| [90fc091360a6cdfcd7f2d6a244f505bdc2280b4c] | committer: Jean-Baptiste Kempf
decoder: fix race in spu_new_buffer There is a race when starting video with subtitles at a given position (via --start-time). If all decoders are flushed early, the video decoder may not have created the Vout via the decoder_NewPicture call. In that case, spu_new_buffer will be blocking for 6 seconds. Indeed, spu_new_buffer can block for maximum 6 seconds when it's waiting for a Vout. To solve this race, abort spu_new_buffer if decoder is flushing. How to reproduce the race condition: ./vlc --start-time 3600 <video_with_subtitles> Signed-off-by: Jean-Baptiste Kempf <[email protected]> > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=90fc091360a6cdfcd7f2d6a244f505bdc2280b4c --- src/input/decoder.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/input/decoder.c b/src/input/decoder.c index 8e1a658..b5ac464 100644 --- a/src/input/decoder.c +++ b/src/input/decoder.c @@ -2192,7 +2192,8 @@ static subpicture_t *spu_new_buffer( decoder_t *p_dec, while( i_attempts-- ) { - if( DecoderIsExitRequested( p_dec ) || p_dec->b_error ) + if( DecoderIsExitRequested( p_dec ) || DecoderIsFlushing( p_dec ) + || p_dec->b_error ) break; p_vout = input_resource_HoldVout( p_owner->p_resource ); _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
