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>
dev
Pekka Paalanen 7 years ago
parent 99f8c08559
commit 99628000cb
  1. 12
      desktop-shell/shell.c

@ -2303,6 +2303,12 @@ fade_out_done_idle_cb(void *data)
struct shell_surface *shsurf = data; struct shell_surface *shsurf = data;
weston_surface_destroy(shsurf->view->surface); 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); free(shsurf);
} }
@ -2420,6 +2426,12 @@ desktop_surface_removed(struct weston_desktop_surface *desktop_surface,
fade_out_done, shsurf); fade_out_done, shsurf);
} else { } else {
weston_view_destroy(shsurf->view); 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); free(shsurf);
} }
} }

Loading…
Cancel
Save