diff options
author | Nicolas Dufresne <nicolas.dufresne@collabora.com> | 2021-07-14 11:43:10 -0400 |
---|---|---|
committer | GStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org> | 2021-07-15 16:22:48 +0000 |
commit | 3e69c5546b0e77c07c10396f64fb621146b44f89 (patch) | |
tree | d2c3790ca06232606ec64488fff2ffa9d25b3788 | |
parent | 88e19f857aff880a69f64fe3dbb90395cb5a2ad6 (diff) | |
download | gstreamer-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.c | 5 |
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; |