diff options
author | Sergi Granell <xerpi.g.12@gmail.com> | 2017-09-27 16:06:37 +0200 |
---|---|---|
committer | Pekka Paalanen <pekka.paalanen@collabora.co.uk> | 2017-10-13 14:12:38 +0300 |
commit | b4e239f29fb17f298c78a7d99b47ef6919edd326 (patch) | |
tree | 7755fdda83329c53803423f49a5abedeadc6aadb | |
parent | cafc652cf647adce97522478410f89e8c30e854b (diff) |
compositor-wayland: destroy the appropriate output instead of exiting when receiving an xdg_toplevel::close event
v2: Fix use after free spotted by Daniel Stone
Signed-off-by: Sergi Granell <xerpi.g.12@gmail.com>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
-rw-r--r-- | libweston/compositor-wayland.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/libweston/compositor-wayland.c b/libweston/compositor-wayland.c index 00cc4d47..e2f416a3 100644 --- a/libweston/compositor-wayland.c +++ b/libweston/compositor-wayland.c @@ -1098,8 +1098,12 @@ static void handle_xdg_toplevel_close(void *data, struct zxdg_toplevel_v6 *xdg_toplevel) { struct wayland_output *output = data; + struct weston_compositor *compositor = output->base.compositor; - weston_compositor_exit(output->base.compositor); + wayland_output_destroy(&output->base); + + if (wl_list_empty(&compositor->output_list)) + weston_compositor_exit(compositor); } static const struct zxdg_toplevel_v6_listener xdg_toplevel_listener = { |