summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergi Granell <xerpi.g.12@gmail.com>2017-09-27 16:06:37 +0200
committerPekka Paalanen <pekka.paalanen@collabora.co.uk>2017-10-13 14:12:38 +0300
commitb4e239f29fb17f298c78a7d99b47ef6919edd326 (patch)
tree7755fdda83329c53803423f49a5abedeadc6aadb
parentcafc652cf647adce97522478410f89e8c30e854b (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.c6
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 = {