From a82fc4cb8fed4fd6f02684320dfed68760c6b15d Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Thu, 25 Jan 2024 11:21:33 +0100 Subject: [PATCH] backend/multi: emit destroy signal before destroying child backends Some users might want to destroy the multi backend when a child backend is being destroyed. However, they can't destroy the multi backend if it's already in the process of being destroyed. The destroy signal was changed to be emitted after destroying child backends in babdd6ccf757 ("backend: fix use-after-free when destroying backends"). However, this was done to accomodate for an old "output_remove" event on backends, which has long been dropped in favor of wlr_output.events.destroy. This patch follows the same principle as 5d639394f3e8 ("types/output: emit destroy event before destroying global"). --- backend/multi/backend.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/multi/backend.c b/backend/multi/backend.c index 8c36834e..df74fbb1 100644 --- a/backend/multi/backend.c +++ b/backend/multi/backend.c @@ -50,6 +50,8 @@ static void multi_backend_destroy(struct wlr_backend *wlr_backend) { wl_list_remove(&backend->display_destroy.link); + wlr_backend_finish(wlr_backend); + // Some backends may depend on other backends, ie. destroying a backend may // also destroy other backends while (!wl_list_empty(&backend->backends)) { @@ -58,8 +60,6 @@ static void multi_backend_destroy(struct wlr_backend *wlr_backend) { wlr_backend_destroy(sub->backend); } - // Destroy this backend only after removing all sub-backends - wlr_backend_finish(wlr_backend); free(backend); }