Mesa (master): egl/wayland-egl: Fix for segfault in dri2_wl_destroy_surface.

Emil Velikov evelikov at kemper.freedesktop.org
Wed Aug 24 09:21:06 UTC 2016


Module: Mesa
Branch: master
Commit: 690ead4a135aed68ddb8dcfceccd11adf27ff1f1
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=690ead4a135aed68ddb8dcfceccd11adf27ff1f1

Author: Stencel, Joanna <joanna.stencel at intel.com>
Date:   Mon Aug 22 09:48:50 2016 +0200

egl/wayland-egl: Fix for segfault in dri2_wl_destroy_surface.

Segfault occurs when destroying EGL surface attached to already destroyed
Wayland window. The fix is to set to NULL the pointer of surface's
native window when wl_egl_destroy_window() is called.

Cc: mesa-stable at lists.freedesktop.org
Signed-off-by: Stencel, Joanna <joanna.stencel at intel.com>
Reviewed-by: Eric Engestrom <eric at engestrom.ch>
Reviewed-by: Emil Velikov <emil.velikov at collabora.com>

---

 src/egl/wayland/wayland-egl/wayland-egl-priv.h | 1 +
 src/egl/wayland/wayland-egl/wayland-egl.c      | 3 +++
 2 files changed, 4 insertions(+)

diff --git a/src/egl/wayland/wayland-egl/wayland-egl-priv.h b/src/egl/wayland/wayland-egl/wayland-egl-priv.h
index f1e3ba2..c91f9cd 100644
--- a/src/egl/wayland/wayland-egl/wayland-egl-priv.h
+++ b/src/egl/wayland/wayland-egl/wayland-egl-priv.h
@@ -27,6 +27,7 @@ struct wl_egl_window {
 
 	void *private;
 	void (*resize_callback)(struct wl_egl_window *, void *);
+	void (*destroy_window_callback)(void *);
 };
 
 #ifdef  __cplusplus
diff --git a/src/egl/wayland/wayland-egl/wayland-egl.c b/src/egl/wayland/wayland-egl/wayland-egl.c
index 80a5be5..4a4701a 100644
--- a/src/egl/wayland/wayland-egl/wayland-egl.c
+++ b/src/egl/wayland/wayland-egl/wayland-egl.c
@@ -66,6 +66,7 @@ wl_egl_window_create(struct wl_surface *surface,
 	egl_window->surface = surface;
 	egl_window->private = NULL;
 	egl_window->resize_callback = NULL;
+	egl_window->destroy_window_callback = NULL;
 	wl_egl_window_resize(egl_window, width, height, 0, 0);
 	egl_window->attached_width  = 0;
 	egl_window->attached_height = 0;
@@ -76,6 +77,8 @@ wl_egl_window_create(struct wl_surface *surface,
 WL_EGL_EXPORT void
 wl_egl_window_destroy(struct wl_egl_window *egl_window)
 {
+	if (egl_window->destroy_window_callback)
+		egl_window->destroy_window_callback(egl_window->private);
 	free(egl_window);
 }
 




More information about the mesa-commit mailing list