summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Waters <matthew@centricular.com>2017-09-05 16:14:02 +1000
committerMatthew Waters <matthew@centricular.com>2017-09-05 21:16:33 +1000
commit3f2a3d0db928e47c1b2f1074ff7c72a69396147a (patch)
tree48e74bbeb72ff810367c32a7699fb25edeba4f31
parent03e96f3ceb76704ea1ec0812d99d33415dd4fb2c (diff)
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 a7ca203..ed974a8 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);