From 690ead4a135aed68ddb8dcfceccd11adf27ff1f1 Mon Sep 17 00:00:00 2001 From: "Stencel, Joanna" Date: Mon, 22 Aug 2016 09:48:50 +0200 Subject: [PATCH] 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@lists.freedesktop.org Signed-off-by: Stencel, Joanna Reviewed-by: Eric Engestrom Reviewed-by: Emil Velikov --- 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 f1e3ba28309..c91f9cdf0fb 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 80a5be5e32c..4a4701a2de7 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); } -- 2.30.2