From 90fc091360a6cdfcd7f2d6a244f505bdc2280b4c Mon Sep 17 00:00:00 2001 From: Thomas Guillem <thomas@gllm.fr> Date: Wed, 18 Mar 2015 09:16:44 +0000 Subject: [PATCH] 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 <jb@videolan.org> --- 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 8e1a658b6355..b5ac4646de10 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 ); -- GitLab