[PATCH weston 1/2] desktop-shell: fix output destroy signal list corruption

Pekka Paalanen ppaalanen at gmail.com
Tue May 22 10:34:40 UTC 2018


From: Pekka Paalanen <pekka.paalanen at collabora.co.uk>

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 <pekka.paalanen at collabora.co.uk>
---
 desktop-shell/shell.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c
index 64db89fc..0e50c97b 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);
 	}
 }
-- 
2.16.1



More information about the wayland-devel mailing list