wayland: how should dispatch the default wayland display queue?

Giulio Camuffo giuliocamuffo at gmail.com
Mon Jul 28 03:29:55 PDT 2014


2014-07-28 13:19 GMT+03:00 Daniel Stone <daniel at fooishbar.org>:
> Hi Eugen,
>
> On 27 July 2014 22:16, Eugen Friedrich <friedrix at gmail.com> wrote:
>>
>> Hi Daniel,
>>
>> thanks, i understood we should add the wl_display_dispatch_pending call in
>> the application
>> there is currently no way to avoid this and basically it does not harm.
>> I only wanted to understand if there is something missing.
>
>
> Doing that is not enough. Firstly, it requires the application to do this,
> or else EGL will break, which will make your stack appear broken with
> different applications. Secondly, as an application may do this in any
> thread, you could run into locking issues.
>
> wl_display_sync() does the following (paraphrased):
>   callback = wl_display_roundtrip(); /* creates wl_callback object on
> default queue */
>   while (!callback_signalled)
>       wl_display_dispatch(); /* dispatch default queue until callback
> processed */

Daniel, you swapped wl_display_sync() and wl_display_roundtrip() :).

>
> This violates the rule that EGL must not intefere with the default queue -
> meaning that the wl_callback object _cannot_ be placed on the main queue.
>
> In order to do this correctly, you will see Mesa does:
>   callback = wl_display_roundtrip();
>   wl_callback_set_queue(callback, internal_egl_queue);
>   while (!callback_signalled)
>       wl_display_dispatch_queue(internal_egl_queue);
>
> As with all objects created by your EGL implementation, the wl_callback
> object must be moved to the queue immediately after it is created by
> wl_display_roundtrip(). Doing this will ensure correctness and also not
> require apps to be constantly dispatching the main queue. You can search the
> Mesa codebase for uses of wl_display_roundtrip() to find some examples of
> this pattern.
>
> Again - any object created by your EGL implementation that is not
> immediately moved to your internal event queue is a bug.
>
> Cheers,
> Daniel
>
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
>


More information about the wayland-devel mailing list