compositor-wayland: destroy the appropriate output instead of exiting when receiving...
authorSergi Granell <xerpi.g.12@gmail.com>
Wed, 27 Sep 2017 14:06:37 +0000 (16:06 +0200)
committerPekka Paalanen <pekka.paalanen@collabora.co.uk>
Fri, 13 Oct 2017 11:12:38 +0000 (14:12 +0300)
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>
libweston/compositor-wayland.c

index 00cc4d4..e2f416a 100644 (file)
@@ -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 = {