From 9d63c803d3e7896d7892405aae8f9d4c6130aba9 Mon Sep 17 00:00:00 2001 From: bi4k8 Date: Thu, 11 Jan 2024 14:56:04 +0000 Subject: [PATCH] view: fix crash when a minimized fullscreen window closes Do not call view methods after invalidating an invariant of the view (view->scene_tree != NULL) --- src/view.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/view.c b/src/view.c index 68e24e2e..7ab09e2d 100644 --- a/src/view.c +++ b/src/view.c @@ -2030,11 +2030,6 @@ view_destroy(struct view *view) osd_on_view_destroy(view); undecorate(view); - if (view->scene_tree) { - wlr_scene_node_destroy(&view->scene_tree->node); - view->scene_tree = NULL; - } - /* * The layer-shell top-layer is disabled when an application is running * in fullscreen mode, so if that's the case, we may have to re-enable @@ -2054,6 +2049,16 @@ view_destroy(struct view *view) menu_close_root(server); } + /* + * Destroy the view's scene tree. View methods assume this is non-NULL, + * so we should avoid any calls to those between this and freeing the + * view. + */ + if (view->scene_tree) { + wlr_scene_node_destroy(&view->scene_tree->node); + view->scene_tree = NULL; + } + /* Remove view from server->views */ wl_list_remove(&view->link); free(view);