Xwayland fatal error when Wayland output disappears

Olivier Fourdan fourdan at gmail.com
Mon Nov 27 09:27:29 UTC 2017


Hi,

On 23 November 2017 at 16:13, Olivier Fourdan <fourdan at gmail.com> wrote:

> FWIW, it seems we have that issue with more than just wl_output, in
> downstream bug 1516859 [1] this occurs with wl_seat on VT switch as well.
>
> That's pretty easy to reproduce, issue several VT switches back and forth
> (I use "chvt" from a remote connection) until the race occurs, here it
> doesn't take long.
>
> Cheers,
> Olivier
>
> [1]   https://bugzilla.redhat.com/show_bug.cgi?id=1516859
>


So, to be clear, the race here is between wl_seat capabilities and
wl_pointer.

On VT switch, the compositor notifies the clients of the changes in wl_seat
capabilities, Xwayland creates and releases the pointer based on these
capabilities, and when switching quickly between VTs, by the time the
get_pointer() is processed by the compositor, the pointer has been released
from a previous capability change.

For clarity, I added a trace in Xwayland's init_pointer() and
release_pointer(), the following in a excerpt of the logs at the time of
the issue:

 *** Xserver-Message *** release_pointer: release pointer

[1868330.603]  -> wl_pointer at 53.release()
[1868330.643]  -> zwp_relative_pointer_v1 at 54.destroy()

[1868330.683] wl_seat at 13.capabilities(2)
[1868330.687]  -> wl_seat at 13.get_keyboard(new id wl_keyboard at 55)
[1868330.704] wl_seat at 13.capabilities(3)

 *** Xserver-Message *** init_pointer: create pointer

[1868330.709]  -> wl_seat at 13.get_pointer(new id wl_pointer at 56)
[1868330.726]  -> zwp_relative_pointer_manager_v1 at 16.get_relative_pointer(new
id zwp_relative_pointer_v1 at 57, wl_pointer at 56)

[1868330.745] wl_seat at 13.capabilities(1)
[1868330.749]  -> wl_keyboard at 55.release()
[1868330.789] wl_seat at 13.capabilities(0)

 *** Xserver-Message *** release_pointer: release pointer

[1868330.794]  -> wl_pointer at 56.release()
[1868330.830]  -> zwp_relative_pointer_v1 at 57.destroy()

[1868381.340] wl_seat at 13.get_pointer(new id wl_pointer at 18)
[1868381.379]  -> wl_display at 1.error(wl_display at 1, 0, "invalid object 18")
[1868381.416] wl_display at 1.error(wl_display at 1, 0, "invalid object 18")

Unfortunately, I am not sure how to avoid this...

Cheers,
Olivier
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.x.org/archives/xorg-devel/attachments/20171127/60d7ae18/attachment.html>


More information about the xorg-devel mailing list