summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPekka Paalanen <pekka.paalanen@collabora.co.uk>2018-05-22 12:48:35 +0300
committerPekka Paalanen <pekka.paalanen@collabora.co.uk>2018-05-22 12:48:35 +0300
commit99628000cbb20113dae3e2bd8833e512286ad308 (patch)
tree383a467923675c72ddea31b06483f600e66735c2
parent99f8c085594dba25006fa29fbfb09b60105bbaf9 (diff)
downloadweston-99628000cbb20113dae3e2bd8833e512286ad308.tar.gz
weston-99628000cbb20113dae3e2bd8833e512286ad308.tar.bz2
weston-99628000cbb20113dae3e2bd8833e512286ad308.zip
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 <pekka.paalanen@collabora.co.uk> Reviewed-by: Ian Ray <ian.ray@ge.com>
-rw-r--r--desktop-shell/shell.c12
1 files changed, 12 insertions, 0 deletions
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);
}
}