wayland: wl_display_dispatch_queue() can block forever.
authorVíctor Manuel Jáquez Leal <victorx.jaquez@intel.com>
Thu, 7 May 2015 10:33:34 +0000 (12:33 +0200)
committerVíctor Manuel Jáquez Leal <victorx.jaquez@intel.com>
Fri, 15 May 2015 15:10:37 +0000 (17:10 +0200)
commit522ec79d2e5c641ca2861689e9a63a6782739d8b
treec02218bcafe42bf870e481bf3c3c893e98ab099f
parent882387de30c20a64d0318ced01b023e9b831e40b
wayland: wl_display_dispatch_queue() can block forever.

wl_display_dispatch_queue() might prevent the pipeline from shutting
down. This can happen e.g. if the wayland compositor exits while the
pipeline is running.

This patch replaces it with these steps:

- With wl_display_prepare_read() all threads announce their intention
  to read.
- wl_display_read_events() is thread save. On threads reads, the other
  wait for it to finish.
- With wl_display_dispatch_queue_pending() each thread dispatches its
  own events.

wl_display_dispatch_queue_pending() was defined since wayland 1.0.2

Original-patch-by: Michael Olbrich <m.olbrich@pengutronix.de>
* stripped out the unlock() unlock_stop() logic
* stripped out the poll handling

Signed-off-by: Víctor Manuel Jáquez Leal <victorx.jaquez@intel.com>
https://bugzilla.gnome.org/show_bug.cgi?id=749078

https://bugzilla.gnome.org/show_bug.cgi?id=747492
configure.ac
gst-libs/gst/vaapi/gstvaapiwindow_wayland.c