diff options
author | Pekka Paalanen <pekka.paalanen@collabora.co.uk> | 2018-05-22 12:48:35 +0300 |
---|---|---|
committer | Pekka Paalanen <pekka.paalanen@collabora.co.uk> | 2018-05-22 12:48:35 +0300 |
commit | 99628000cbb20113dae3e2bd8833e512286ad308 (patch) | |
tree | 383a467923675c72ddea31b06483f600e66735c2 | |
parent | 99f8c085594dba25006fa29fbfb09b60105bbaf9 (diff) | |
download | weston-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.c | 12 |
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); } } |