From f6fe43971876082b0c201696bf01dcd57de866c3 Mon Sep 17 00:00:00 2001 From: Isaac Freund Date: Tue, 19 Jan 2021 11:48:36 +0100 Subject: [PATCH] xdg-output: destroy outputs before manager Since output_destroy() calls wl_list_remove() on the output's link, the manager must still be valid. This is the same bug fixed in bf926e3 but with a different interface. --- types/wlr_xdg_output_v1.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/types/wlr_xdg_output_v1.c b/types/wlr_xdg_output_v1.c index e81080ba..819ea6c6 100644 --- a/types/wlr_xdg_output_v1.c +++ b/types/wlr_xdg_output_v1.c @@ -227,6 +227,10 @@ static void handle_layout_change(struct wl_listener *listener, void *data) { } static void manager_destroy(struct wlr_xdg_output_manager_v1 *manager) { + struct wlr_xdg_output_v1 *output, *tmp; + wl_list_for_each_safe(output, tmp, &manager->outputs, link) { + output_destroy(output); + } wlr_signal_emit_safe(&manager->events.destroy, manager); wl_list_remove(&manager->display_destroy.link); wl_list_remove(&manager->layout_add.link);