[vlc-devel] [PATCH 3/7] video_output: asset the display existence inside the display_lock

Steve Lhomme robux4 at ycbcr.xyz
Thu Oct 10 09:38:39 CEST 2019


On 2019-10-10 9:11, Thomas Guillem wrote:
> 
> 
> On Thu, Oct 10, 2019, at 08:10, Steve Lhomme wrote:
>> On 2019-10-09 17:57, Thomas Guillem wrote:
>>> Not needed, you shoud add a documentation that says that is API is not thread safe but reentrant like decoder_updatevideoformat()
>>
>> Same remark, it requires to know the whole code around this function to
>> read 4 lines that would otherwise be totally coherent. It requires
>> reading a whole lot more code for the sake of it (and reading
>> multithread code in a 2000 lines file is anything but easy).
>>
>> In other words it means: if you intend to touch this file, you have to
>> understand all of it. What may seem straightforward is not.
>>
>> If a comment is needed that's why a variable with a dedicated lock is
>> read without that lock. What kind of multithreading good practice is that ?
> 
> Reducing the lock scope to the maximum allow a lot more flexibility from the caller of this API.

As a general principal yes. But is there a case where the assert will 
fail where it wouldn't fail when outside of the lock ? If yes, then the 
assert should be in the lock. If not it doesn't hurt to put it in the lock.

> This API just lacks a proper documentation.
> Anyway, this API is used from decoder.c that handle himself its locking/serialization.

Assuming the code is safe because the caller is safe doesn't seem good 
multithreading practice.

 > Adding extra locks doesn't seem a good idea to me.

I agree and there is no lock added.

>>
>>> On Wed, Oct 9, 2019, at 17:36, Steve Lhomme wrote:
>>>> ---
>>>>    src/video_output/video_output.c | 4 +---
>>>>    1 file changed, 1 insertion(+), 3 deletions(-)
>>>>
>>>> diff --git a/src/video_output/video_output.c
>>>> b/src/video_output/video_output.c
>>>> index df27a402b8b..e8ee9572188 100644
>>>> --- a/src/video_output/video_output.c
>>>> +++ b/src/video_output/video_output.c
>>>> @@ -1346,8 +1346,6 @@ void vout_ChangePause(vout_thread_t *vout, bool
>>>> is_paused, vlc_tick_t date)
>>>>    static void vout_FlushUnlocked(vout_thread_t *vout, bool below,
>>>>                                   vlc_tick_t date)
>>>>    {
>>>> -    vout_thread_sys_t *sys = vout->p;
>>>> -
>>>>        vout->p->step.timestamp = VLC_TICK_INVALID;
>>>>        vout->p->step.last      = VLC_TICK_INVALID;
>>>>    
>>>> @@ -1368,8 +1366,8 @@ static void vout_FlushUnlocked(vout_thread_t
>>>> *vout, bool below,
>>>>    
>>>>        picture_fifo_Flush(vout->p->decoder_fifo, date, below);
>>>>    
>>>> -    assert(sys->display != NULL);
>>>>        vlc_mutex_lock(&vout->p->display_lock);
>>>> +    assert(vout->p->display != NULL);
>>>>        vout_FilterFlush(vout->p->display);
>>>>        vlc_mutex_unlock(&vout->p->display_lock);
>>>>    
>>>> -- 
>>>> 2.17.1
>>>>
>>>> _______________________________________________
>>>> vlc-devel mailing list
>>>> To unsubscribe or modify your subscription options:
>>>> https://mailman.videolan.org/listinfo/vlc-devel
>>> _______________________________________________
>>> vlc-devel mailing list
>>> To unsubscribe or modify your subscription options:
>>> https://mailman.videolan.org/listinfo/vlc-devel
>>>
>> _______________________________________________
>> vlc-devel mailing list
>> To unsubscribe or modify your subscription options:
>> https://mailman.videolan.org/listinfo/vlc-devel
> _______________________________________________
> 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