[vlc-devel] [PATCH] decoder: move the owner lock closer to the variable use
Thomas Guillem
thomas at gllm.fr
Tue Sep 3 11:36:19 CEST 2019
OK
On Tue, Sep 3, 2019, at 11:31, Steve Lhomme wrote:
> Similar to how it's done in DecoderProcessFlush().
>
> It makes it clearer when variables are accessed under lock. It also avoids
> locking in some cases if not needed.
> ---
> src/input/decoder.c | 18 ++++++++++++------
> 1 file changed, 12 insertions(+), 6 deletions(-)
>
> diff --git a/src/input/decoder.c b/src/input/decoder.c
> index f66b708b4d..5bd59fc6b0 100644
> --- a/src/input/decoder.c
> +++ b/src/input/decoder.c
> @@ -1465,12 +1465,16 @@ static void OutputChangePause( struct
> decoder_owner *p_owner, bool paused, vlc_t
> switch( p_dec->fmt_out.i_cat )
> {
> case VIDEO_ES:
> + vlc_mutex_lock( &p_owner->lock );
> if( p_owner->p_vout != NULL )
> vout_ChangePause( p_owner->p_vout, paused, date );
> + vlc_mutex_unlock( &p_owner->lock );
> break;
> case AUDIO_ES:
> + vlc_mutex_lock( &p_owner->lock );
> if( p_owner->p_aout != NULL )
> aout_DecChangePause( p_owner->p_aout, paused, date );
> + vlc_mutex_unlock( &p_owner->lock );
> break;
> case SPU_ES:
> break;
> @@ -1484,6 +1488,7 @@ static void OutputChangeRate( struct
> decoder_owner *p_owner, float rate )
> decoder_t *p_dec = &p_owner->dec;
>
> msg_Dbg( p_dec, "changing rate: %f", rate );
> + vlc_mutex_lock( &p_owner->lock );
> switch( p_dec->fmt_out.i_cat )
> {
> case VIDEO_ES:
> @@ -1506,6 +1511,7 @@ static void OutputChangeRate( struct
> decoder_owner *p_owner, float rate )
> vlc_assert_unreachable();
> }
> p_owner->output_rate = rate;
> + vlc_mutex_unlock( &p_owner->lock );
> }
>
> static void OutputChangeDelay( struct decoder_owner *p_owner,
> vlc_tick_t delay )
> @@ -1517,20 +1523,26 @@ static void OutputChangeDelay( struct
> decoder_owner *p_owner, vlc_tick_t delay )
> switch( p_dec->fmt_out.i_cat )
> {
> case VIDEO_ES:
> + vlc_mutex_lock( &p_owner->lock );
> if( p_owner->p_vout != NULL )
> vout_ChangeDelay( p_owner->p_vout, delay );
> + vlc_mutex_unlock( &p_owner->lock );
> break;
> case AUDIO_ES:
> + vlc_mutex_lock( &p_owner->lock );
> if( p_owner->p_aout != NULL )
> aout_DecChangeDelay( p_owner->p_aout, delay );
> + vlc_mutex_unlock( &p_owner->lock );
> break;
> case SPU_ES:
> + vlc_mutex_lock( &p_owner->lock );
> if( p_owner->p_vout != NULL )
> {
> assert(p_owner->i_spu_channel !=
> VOUT_SPU_CHANNEL_INVALID);
> vout_ChangeSpuDelay(p_owner->p_vout,
> p_owner->i_spu_channel,
> delay);
> }
> + vlc_mutex_unlock( &p_owner->lock );
> break;
> default:
> vlc_assert_unreachable();
> @@ -1595,9 +1607,7 @@ static void *DecoderThread( void *p_data )
> paused = p_owner->paused;
> vlc_fifo_Unlock( p_owner->p_fifo );
>
> - vlc_mutex_lock( &p_owner->lock );
> OutputChangePause( p_owner, paused, date );
> - vlc_mutex_unlock( &p_owner->lock );
>
> vlc_restorecancel( canc );
> vlc_fifo_Lock( p_owner->p_fifo );
> @@ -1611,9 +1621,7 @@ static void *DecoderThread( void *p_data )
> rate = p_owner->request_rate;
> vlc_fifo_Unlock( p_owner->p_fifo );
>
> - vlc_mutex_lock( &p_owner->lock );
> OutputChangeRate( p_owner, rate );
> - vlc_mutex_unlock( &p_owner->lock );
>
> vlc_restorecancel( canc );
> vlc_fifo_Lock( p_owner->p_fifo );
> @@ -1626,9 +1634,7 @@ static void *DecoderThread( void *p_data )
> delay = p_owner->delay;
> vlc_fifo_Unlock( p_owner->p_fifo );
>
> - vlc_mutex_lock( &p_owner->lock );
> OutputChangeDelay( p_owner, delay );
> - vlc_mutex_unlock( &p_owner->lock );
>
> vlc_restorecancel( canc );
> vlc_fifo_Lock( p_owner->p_fifo );
> --
> 2.17.1
>
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
More information about the vlc-devel
mailing list