gl/wayland: call eglTerminate() before wl_display_disconnect()
authorMatthew Waters <matthew@centricular.com>
Tue, 5 Sep 2017 06:14:02 +0000 (16:14 +1000)
committerMatthew Waters <matthew@centricular.com>
Tue, 5 Sep 2017 11:16:33 +0000 (21:16 +1000)
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

gst-libs/gst/gl/wayland/gstgldisplay_wayland.c

index a7ca203..ed974a8 100644 (file)
@@ -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);