[vlc-devel] [PATCH 2/7] video_output: read the vd inside the display_lock
Steve Lhomme
robux4 at ycbcr.xyz
Thu Oct 10 08:39:07 CEST 2019
On 2019-10-10 8:28, Rémi Denis-Courmont wrote:
> Hi,
>
> There is no threading 101 here. It's common sense in threading that some
> data is readable and some is not. Otherwise you couldn't even get a hold
> of the lock objects.
>
> Increasing lock scope for taste reasons is horrible. It just gives the
> wrong impression about the requirements, and creates confusion.
I am confused by reading this code, hence the existence of this patch.
So don't tell me there was less confusion before. As I explained I have
to read 2000 lines and probe all accesses to that variable to finally
conclude it's OK to read it without the lock and then lock all accesses
to read *right after*.
Actually it's more than 2000 lines, because of all the vout_XXX
semi-public functions I also have to know which are called from which
thread to conclude if there's not a case where the value of sys->display
can be modified during this function call.
The fact that there's no documentation on who owns the value and when it
can be set/not set doesn't help either.
So don't tell me about creating confusion. If there's one confusion it's
a variable read without a lock and locking it *right after*.
> Totally agree with Thomas against this change.
>
> Le 10 octobre 2019 09:05:07 GMT+03:00, Steve Lhomme <robux4 at ycbcr.xyz> a
> écrit :
>
> On 2019-10-09 18:15, Rémi Denis-Courmont wrote:
>
> Le keskiviikkona 9. lokakuuta 2019, 18.50.23 EEST Steve Lhomme a
> écrit :
>
> On 2019-10-09 17:48, Thomas Guillem wrote:
>
> On Wed, Oct 9, 2019, at 17:36, Steve Lhomme wrote:
>
> ------------------------------------------------------------------------
> src/video_output/video_output.c | 3 +--
> 1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/src/video_output/video_output.c
> b/src/video_output/video_output.c
> index a5046913867..df27a402b8b 100644
> --- a/src/video_output/video_output.c
> +++ b/src/video_output/video_output.c
> @@ -1013,9 +1013,8 @@ static int
> ThreadDisplayRenderPicture(vout_thread_t *vout, bool
> is_forced)
>
> if (filtered->date != sys->displayed.current->date)
>
> msg_Warn(vout, "Unsupported timestamp modifications
> done by
>
> chain_interactive");
>
> - vout_display_t *vd = sys->display;
> -
>
> vlc_mutex_lock(&sys->display_lock);
>
> + vout_display_t *vd = sys->display;
>
> It is not needed since this variable is set before the
> thread is created.
>
> At the very least it's easier to read than wonder why this
> right exactly
> before a lock. Why make things more complicated to read ?
>
> On the complexity metric, it's exactly the same - not more or less
> complicated.
>
> And it gives the wrong impression that the value needs the lock
> to be read. So
> it's really just worse. I agree with Thomas.
>
>
> When I read this I read: the coherence is not guaranteed. This is
> multithreading 101. Forcing the reader to know the whole context of
> where sys->display comes from and when it exists or is modified, just to
> read this function, is just plain dumb. There is no technical reason.
> The only reason given is that because of the conjunctions of all the
> planets around this function it is actually possible to read the value
> without the lock (and then lock any access to that value for everyone
> else because it would have terrible consequences).
>
> To me it's just keeping a complexity just for the sake of it.
> ------------------------------------------------------------------------
> 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
>
More information about the vlc-devel
mailing list