[vlc-devel] [vlc-commits] vout: cancel the thread and simplify
Thomas Guillem
thomas at gllm.fr
Thu May 9 12:15:34 CEST 2019
On Thu, May 9, 2019, at 11:48, Rémi Denis-Courmont wrote:
> It does simplify the code on objective complexity metrics. And that ship has sailed about ten years ago.
>
> And I don't think it's okay to pick on one developer. I was not the first to push code without review lately. And I am also not the only person to disagree with systematic review.
I don't think someone pushed in VLC core without a review since we decided to move to gitlab.
>From the vote poll result, it seems the vast majority of people agreed to use gitalb and systematic reviews.
>
> Le 9 mai 2019 10:35:47 GMT+03:00, Thomas Guillem <thomas at gllm.fr> a écrit :
>> Hello,
>>
>> This doesn't simplify at all, thread_cancel is very complicated, I wold have preferred a cond + bool.
>>
>> You should propose all your patches changing the core to the ML. Since they always have to be reviewed anyway when we switch to gitlab soon.
>>
>> On Wed, May 8, 2019, at 20:21, Rémi Denis-Courmont wrote:
>>> vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Wed May
>>> 8 19:20:53 2019 +0300| [949204f27498bd21e8d269b5aa9b80c7ec84a435] |
>>> committer: Rémi Denis-Courmont
>>>
>>> vout: cancel the thread and simplify
>>>
>>>> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=949204f27498bd21e8d269b5aa9b80c7ec84a435
>>> src/video_output/control.h | 7 -------
>>> src/video_output/video_output.c | 24 ++++++++++++------------
>>> 2 files changed, 12 insertions(+), 19 deletions(-)
>>>
>>> diff --git a/src/video_output/control.h b/src/video_output/control.h
>>> index 46b78122e4..b189b6478a 100644
>>> --- a/src/video_output/control.h
>>> +++ b/src/video_output/control.h
>>> @@ -27,13 +27,6 @@
>>>
>>> /* */
>>> enum {
>>> - VOUT_CONTROL_CLEAN,
>>> -
>>> -#if 0
>>> - /* */
>>> - VOUT_CONTROL_START,
>>> - VOUT_CONTROL_STOP,
>>> -#endif
>>> VOUT_CONTROL_CHANGE_FILTERS, /* string */
>>> VOUT_CONTROL_CHANGE_INTERLACE, /* boolean */
>>>
>>> diff --git a/src/video_output/video_output.c b/src/video_output/video_output.c
>>> index 2a76ad5c00..b84336ac23 100644
>>> --- a/src/video_output/video_output.c
>>> +++ b/src/video_output/video_output.c
>>> @@ -33,6 +33,8 @@
>>> # include "config.h"
>>> #endif
>>>
>>> +#include <stdnoreturn.h>
>>> +
>>> #include <vlc_common.h>
>>>
>>> #include <math.h>
>>> @@ -1527,11 +1529,9 @@ void vout_Cancel(vout_thread_t *vout, bool canceled)
>>> vout_control_Release(&sys->control);
>>> }
>>>
>>> -static int ThreadControl(vout_thread_t *vout, vout_control_cmd_t cmd)
>>> +static void ThreadControl(vout_thread_t *vout, vout_control_cmd_t cmd)
>>> {
>>> switch(cmd.type) {
>>> - case VOUT_CONTROL_CLEAN:
>>> - return 1;
>>> case VOUT_CONTROL_CHANGE_FILTERS:
>>> ThreadChangeFilters(vout, NULL,
>>> cmd.string != NULL ?
>>> @@ -1579,7 +1579,6 @@ static int ThreadControl(vout_thread_t *vout,
>>> vout_control_cmd_t cmd)
>>> break;
>>> }
>>> vout_control_cmd_Clean(&cmd);
>>> - return 0;
>>> }
>>>
>>>
>>> /*****************************************************************************
>>> @@ -1589,7 +1588,7 @@ static int ThreadControl(vout_thread_t *vout,
>>> vout_control_cmd_t cmd)
>>> * terminated. It handles the pictures arriving in the video heap and
>>> the
>>> * display device events.
>>>
>>> *****************************************************************************/
>>> -static void *Thread(void *object)
>>> +noreturn static void *Thread(void *object)
>>> {
>>> vout_thread_t *vout = object;
>>> vout_thread_sys_t *sys = vout->p;
>>> @@ -1607,20 +1606,21 @@ static void *Thread(void *object)
>>> } else {
>>> deadline = VLC_TICK_INVALID;
>>> }
>>> - while (!vout_control_Pop(&sys->control, &cmd, deadline))
>>> - if (ThreadControl(vout, cmd))
>>> - goto out;
>>> + while (!vout_control_Pop(&sys->control, &cmd, deadline)) {
>>> + int canc = vlc_savecancel();
>>> + ThreadControl(vout, cmd);
>>> + vlc_restorecancel(canc);
>>> + }
>>>
>>> + int canc = vlc_savecancel();
>>> deadline = VLC_TICK_INVALID;
>>> wait = ThreadDisplayPicture(vout, &deadline) != VLC_SUCCESS;
>>>
>>> const bool picture_interlaced = sys->displayed.is_interlaced;
>>>
>>> vout_SetInterlacingState(vout, picture_interlaced);
>>> + vlc_restorecancel(canc);
>>> }
>>> -
>>> -out:
>>> - return NULL;
>>> }
>>>
>>> static void vout_StopDisplay(vout_thread_t *vout)
>>> @@ -1628,7 +1628,7 @@ static void vout_StopDisplay(vout_thread_t *vout)
>>> vout_thread_sys_t *sys = vout->p;
>>>
>>> assert(sys->original.i_chroma != 0);
>>> - vout_control_PushVoid(&sys->control, VOUT_CONTROL_CLEAN);
>>> + vlc_cancel(sys->thread);
>>> vlc_join(sys->thread, NULL);
>>>
>>> if (sys->spu_blend != NULL) vlc-commits mailing list
>>> vlc-commits at videolan.org
>>> https://mailman.videolan.org/listinfo/vlc-commits
>>>
>> vlc-devel mailing list
>> To unsubscribe or modify your subscription options:
>> https://mailman.videolan.org/listinfo/vlc-devel
>
> --
> Envoyé de mon appareil Android avec Courriel K-9 Mail. Veuillez excuser ma brièveté.
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/vlc-devel/attachments/20190509/31733e3a/attachment.html>
More information about the vlc-devel
mailing list