summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Dufresne <nicolas.dufresne@collabora.com>2021-07-14 11:43:10 -0400
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>2021-07-15 16:22:48 +0000
commit3e69c5546b0e77c07c10396f64fb621146b44f89 (patch)
treed2c3790ca06232606ec64488fff2ffa9d25b3788
parent88e19f857aff880a69f64fe3dbb90395cb5a2ad6 (diff)
downloadgstreamer-plugins-base-3e69c5546b0e77c07c10396f64fb621146b44f89.tar.gz
gl: wayland: Fix hinding the window on close()
When the window is called, we properly destroy all surfaces, which effectively will unmap that surface and should make it disapear on screen, but we also destroy the wl_source, a GSource that is resposibble of dispatching and executing messages to/from the Wayland server. As a side effect, the server never gets the message and the surfaces are "leaked" on the server. We fix this using wl_display_flush() before destroying the wl_source. Fixes #815 Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1226>
-rw-r--r--gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c b/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c
index ecfa03b49..20ce51da7 100644
--- a/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c
+++ b/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c
@@ -469,6 +469,11 @@ gst_gl_window_wayland_egl_close (GstGLWindow * gl_window)
destroy_surfaces (window_egl);
+ /* As we are about to destroy the wl_source, we need to ensure everything
+ * has been sent synchronously, otherwise we will be leaking surfaces on
+ * server, leaving the window visible and unrefreshed on screen. */
+ wl_display_flush (GST_GL_DISPLAY_WAYLAND (gl_window->display)->display);
+
g_source_destroy (window_egl->wl_source);
g_source_unref (window_egl->wl_source);
window_egl->wl_source = NULL;