wayland: don't poll if there are no pending frames
authorMichael Olbrich <m.olbrich@pengutronix.de>
Fri, 13 Apr 2018 07:28:53 +0000 (09:28 +0200)
committerVíctor Manuel Jáquez Leal <vjaquez@igalia.com>
Wed, 18 Apr 2018 11:57:53 +0000 (13:57 +0200)
Otherwise the following poll may not return for an arbitrary amount of
time. This can happen if another wayland event queue has flushed and read
our events.

https://bugzilla.gnome.org/show_bug.cgi?id=795224

gst-libs/gst/vaapi/gstvaapiwindow_wayland.c

index 3d77e45..bd2d89d 100644 (file)
@@ -185,6 +185,11 @@ gst_vaapi_window_wayland_sync (GstVaapiWindow * window)
     if (wl_display_flush (wl_display) < 0)
       goto error;
 
+    if (g_atomic_int_get (&priv->num_frames_pending) == 0) {
+      wl_display_cancel_read (wl_display);
+      return TRUE;
+    }
+
   again:
     if (gst_poll_wait (priv->poll, GST_CLOCK_TIME_NONE) < 0) {
       int saved_errno = errno;