From 99628000cbb20113dae3e2bd8833e512286ad308 Mon Sep 17 00:00:00 2001 From: Pekka Paalanen Date: Tue, 22 May 2018 12:48:35 +0300 Subject: [PATCH] desktop-shell: fix output destroy signal list corruption This issue was introduced by "desktop-shell: detect stale shell surface outputs" which forgot to remove the output destroy listener when shell_surface is destroyed, leading to memory corruption. This was fairly easy to trigger by opening and closing an application window a few times. Signed-off-by: Pekka Paalanen Reviewed-by: Ian Ray --- desktop-shell/shell.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c index 64db89fc2..0e50c97b3 100644 --- a/desktop-shell/shell.c +++ b/desktop-shell/shell.c @@ -2303,6 +2303,12 @@ fade_out_done_idle_cb(void *data) struct shell_surface *shsurf = data; weston_surface_destroy(shsurf->view->surface); + + if (shsurf->output_destroy_listener.notify) { + wl_list_remove(&shsurf->output_destroy_listener.link); + shsurf->output_destroy_listener.notify = NULL; + } + free(shsurf); } @@ -2420,6 +2426,12 @@ desktop_surface_removed(struct weston_desktop_surface *desktop_surface, fade_out_done, shsurf); } else { weston_view_destroy(shsurf->view); + + if (shsurf->output_destroy_listener.notify) { + wl_list_remove(&shsurf->output_destroy_listener.link); + shsurf->output_destroy_listener.notify = NULL; + } + free(shsurf); } }