summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Waters <matthew@centricular.com>2017-09-05 16:14:02 +1000
committerNicolas Dufresne <nicolas.dufresne@collabora.com>2017-12-06 14:24:18 -0500
commitbfce027d81e60d02fdd1ed64516587c9fd67d953 (patch)
tree5cb798e73f7426d214178b94913bc840925ea4a7
parent6db0d3f04e9fd4fa133fda3bcc4c89f8f23c3291 (diff)
downloadgstreamer-plugins-bad-bfce027d81e60d02fdd1ed64516587c9fd67d953.tar.gz
gl/wayland: call eglTerminate() before wl_display_disconnect()
Calling these two functions in the wrong order will result in use-after-free inside wayland. https://bugzilla.gnome.org/show_bug.cgi?id=787293
-rw-r--r--gst-libs/gst/gl/wayland/gstgldisplay_wayland.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/gst-libs/gst/gl/wayland/gstgldisplay_wayland.c b/gst-libs/gst/gl/wayland/gstgldisplay_wayland.c
index e466fb4dd..c3e902de4 100644
--- a/gst-libs/gst/gl/wayland/gstgldisplay_wayland.c
+++ b/gst-libs/gst/gl/wayland/gstgldisplay_wayland.c
@@ -91,6 +91,10 @@ gst_gl_display_wayland_finalize (GObject * object)
{
GstGLDisplayWayland *display_wayland = GST_GL_DISPLAY_WAYLAND (object);
+ /* Cause eglTerminate() to occur before wl_display_disconnect()
+ * https://bugzilla.gnome.org/show_bug.cgi?id=787293 */
+ g_object_set_data (object, "gst.gl.display.egl", NULL);
+
if (!display_wayland->foreign_display && display_wayland->display) {
wl_display_flush (display_wayland->display);
wl_display_disconnect (display_wayland->display);