[vlc-devel] [PATCH] input: waiting and flushing states should be mutually exclusive
Rémi Denis-Courmont
remi at remlab.net
Tue Sep 2 11:30:33 CEST 2014
Fine with me
Le 2014-09-02 12:00, Felix Abecassis a écrit :
> A crash could occur in the following situation:
> 1) A video decoder is created and starts waiting for the first
> picture:
> b_waiting = true, b_first = true
>
> 2) The first picture is received but the decoder is still in waiting
> mode:
> b_waiting = true, b_first = false
>
> 3) A second picture is received, the decoder is now waiting in
> DecoderWaitUnblock().
>
> 4) From the input thread, an EOF event is received,
> EsOutChangePosition is
> called and sets the decoder in flushing mode.
>
> 5) The decoder thread wakes up and exits DecoderWaitUnblock because
> b_flushing is true. However this triggers the assertion in
> DecoderDecodeVideo since we have b_waiting && !b_first.
>
> Fix #11892, #12041
> ---
> src/input/decoder.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/src/input/decoder.c b/src/input/decoder.c
> index bbcfcf8..d40c7d3 100644
> --- a/src/input/decoder.c
> +++ b/src/input/decoder.c
> @@ -946,6 +946,7 @@ static void DecoderFlush( decoder_t *p_dec )
> /* Empty the fifo */
> block_FifoEmpty( p_owner->p_fifo );
>
> + p_owner->b_waiting = false;
> /* Monitor for flush end */
> p_owner->b_flushing = true;
> vlc_cond_signal( &p_owner->wait_request );
--
Rémi Denis-Courmont
More information about the vlc-devel
mailing list