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
m4_define([gst16_plugins_bad_version], [1.5.0])
# Wayland minimum version number
-m4_define([wayland_api_version], [1.0.0])
+m4_define([wayland_api_version], [1.0.2])
# VA-API minimum version number
m4_define([va_api_version], [0.30.4])
GST_VAAPI_OBJECT_NATIVE_DISPLAY (window);
while (g_atomic_int_get (&priv->num_frames_pending) > 0) {
- if (wl_display_dispatch_queue (wl_display, priv->event_queue) < 0)
- return FALSE;
+ while (wl_display_prepare_read_queue (wl_display, priv->event_queue) < 0) {
+ if (wl_display_dispatch_queue_pending (wl_display, priv->event_queue) < 0)
+ goto error;
+ }
+
+ if (wl_display_flush (wl_display) < 0)
+ goto error;
+ if (wl_display_read_events (wl_display) < 0)
+ goto error;
+ if (wl_display_dispatch_queue_pending (wl_display, priv->event_queue) < 0)
+ goto error;
}
return TRUE;
+
+error:
+ GST_ERROR ("Error on dispatching events: %s", g_strerror (errno));
+ return FALSE;
}
static void