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);