[vlc-devel] [PATCH] xdg_shell needs to be fully configured
erwan.tulou at gmail.com
erwan.tulou at gmail.com
Tue Jun 19 14:01:53 CEST 2018
Hello,
On 18/06/2018 20:22, Rémi Denis-Courmont wrote:
> Le tiistaina 12. kesäkuuta 2018, 17.14.43 EEST erwan.tulou at gmail.com a écrit :
>> Hello,
>>
>> One more (important) patch to improve xdg_shell.
>>
>> the Wayland documentation makes it explicit that no buffer must be
>> attached or committed before an xdg surface is fully configured.
>> (ack_configure sent).
>> Therefore, the xdg_shell vout window must ensure that the
>> ack_configure() has been sent before handing over the surface handler to
>> be used.
>>
>> On Weston, the bug is straightforward with the following message :
>> error: xdg_surface at 9: error 3: xdg_surface has never been configured
> It is true that VLC violates the letter of the protocol specification, but I
> cannot reproduce the problem with Weston 4.0.0
There was also a problem with Gnome Mutter (tested on Debian Buster).
Though no error messages were issued, if not fully configured, the xdg
toplevel couldn't remember its previous geometry after returning from
fullscreen.
The test case was the following: launch a video, go fullscreen, come
back normal :
With the patch :
The xdg toplevel remembers its geometry prior to fullscreen. The video
comes back to the right size without any need to reconfigure it.
Without the patch:
The video doesn't come back. Actually, the geometry is reset to width =
1, height = 1. It seems that since the xdg toplevel did not reach full
configuration, a default w=1, h=1 is applied instead of the previous size.
>
> In any case, it looks to me that the patch will lock-up the wl_shell plugin.
>
The patch will have indeed the vout thread wait in the Open() function
of the vout window plugin till the xdg surface configure callback is
received and executed. As long as the wl_display_dispatch() is done
before vlc_clone, no race is to be afraid of. This is actually a
pattern similar to the qt or skins2 vout window that block the vout
thread till a fully configured window handler is ready.
I think the issue must be addressed. The way to address it is not
debatable. The patch I sent is one viable solution. Another one could be
based on the usual vlc cond_wait/lock mechanisms.
Also the patch I sent should definitely check wl_display_dispatch() for
possible errors to avoid an infinite loop, which I forgot.
Rgds
---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus
More information about the vlc-devel
mailing list