https://bugs.freedesktop.org/show_bug.cgi?id=91750
--- Comment #8 from Jonas Ådahl <[email protected]> --- (In reply to Yujie Shen from comment #7) > (In reply to Jonas Ådahl from comment #6) > > Yujie: as indirectly stated by Pekka, my example was incomplete. You would > > also need to dispatch pending events before the > > wl_display_prepare_read(display) call. This makes it, ignoring error > > handling, more or less: > > > > wl_surface_attach(); > > while (wl_display_prepare_read_queue(display, queue) < 0) > > wl_display_dispatch_queue_pending(display, queue); > > window->callback = wl_surface_frame(window->surface); > > wl_proxy_set_queue(window->callback,queue2); > > wl_callback_add_listener(window->callback, &frame_listener, window); > > wl_display_cancel_read(display); > > wl_surface_commit(window->surface); > > > > This has the side effect that events already in the queue will be always > > dispatched before the frame is requested. This may have unwanted effects, so > > please consider whether this is Ok in your architecture. If it is not, you > > need to make sure that the above code is done after all events on the queue > > has been dispatched. > > Thanks for your kindly help. > By adding > >while (wl_display_prepare_read_queue(display, queue2) < 0) > > wl_display_dispatch_queue_pending(display, queue2); > >wl_surface_commit(window->surface); > it works in my case. > but, I still don't understand why it requires the wl_event_queue to be > empty?? > I'm trying to summary the restrictions of wayland when multi-thread > programming. > May I know if you have any idea about it. It is a requirement by wl_display_prepare_read_queue() that to succeed the queue has to be empty and it needs to succeed in order to block the other threads from dispatching. You should put it before wl_surface_frame() though, because it is between wl_surface_frame() and wl_proxy_set_queue() the race can happen, and don't forget to call wl_display_cancel_read(). Earlier today I wrote a summary about the known threading issues in the API. Please see bug 91769. -- You are receiving this mail because: You are the assignee for the bug.
_______________________________________________ wayland-bugs mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/wayland-bugs
