Bug 91769

Summary: Meta bug for libwayland-client threading issues
Product: Wayland Reporter: Jonas Ådahl <jadahl>
Component: waylandAssignee: Wayland bug list <wayland-bugs>
Status: RESOLVED MOVED QA Contact:
Severity: normal    
Priority: medium CC: daniel, ppaalanen
Version: unspecified   
Hardware: Other   
OS: All   
Whiteboard:
i915 platform: i915 features:
Bug Depends on: 83430, 91273, 91766, 91767, 91768    
Bug Blocks:    

Description Jonas Ådahl 2015-08-27 02:33:22 UTC
Currently, as of 1.8 (and the coming 1.9), there are several issues with the meant to be thread safe API. This bug report is the meta bug of the different ones that are known.

The known issues at the point of the reporting of this bug are:

* The setup of wl_proxy (or, rather, setting the wl_proxy queue) is racy in multi threaded architectures.

If thread A creates a proxy meant to be dispatched on a queue only used on that thread, while another thread B is reading and dispatching the default queue, it may happen that the thread B reads and dispatches events sent to the proxy just created by thread A, before thread A had the chance to set the queue of the proxy to its own. The reason for this is that the sequence "proxy = wl_proxy_create(...); wl_proxy_set_queue(proxy, queue);" is not atomic, and the state between the calls is that the proxy has the default queue. Would thread A yield there, and input already be available, thread B would read and dispatch the event on the default queue, i.e. on the wrong thread. See bug 91273 for more info.

* The documentation for wl_display_dispatch() and wl_display_dispatch_queue() states that they may not be mixed with wl_display_prepare_read() and friends. This is likely incorrect, since wl_display_dispatch(_queue) more or less does what a client would do when using wl_display_prepare_read() etc. See bug 91767 for more info.

* Using either the wl_display_dispatch(_queue) or by following the code samples about how to use wl_display_prepare_read() and friends, one cannot cancel a dispatch call without some input being available on the fd. In effect, this means that there is no reliable way for a client to disconnect when using the dispatch helpers. See bug 91766.

* wl_display_roundtrip_queue() exposes the race condition discussed above and in bug 91273. Any solution to bug 91273 needs to be suitable to wl_display_roundtrip_queue(). See bug 91768.
Comment 1 Daniel Stone 2016-09-02 16:14:33 UTC
This is done now, right?
Comment 2 Jonas Ådahl 2016-09-02 16:52:28 UTC
There is still bug 91766.
Comment 3 GitLab Migration User 2018-06-08 23:50:02 UTC
-- GitLab Migration Automatic Message --

This bug has been migrated to freedesktop.org's GitLab instance and has been closed from further activity.

You can subscribe and participate further through the new bug through this link to our GitLab instance: https://gitlab.freedesktop.org/wayland/wayland/issues/38.

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.