From 266e2e1d4866ef7c39cff0b77f1e404d0dc96b55 Mon Sep 17 00:00:00 2001 From: Michael Tretter Date: Tue, 18 Oct 2022 15:24:04 +0200 Subject: [PATCH] ivi-shell: fix cleanup of desktop surfaces The ivi-shell keeps track of its surfaces by adding them to the ivi_surface_list to be able to remove them on shutdown. It also creates an ivi_layout_surface for a desktop surface, but does not keep track of these surfaces. During compositor shutdown, libweston prints the following message: BUG: finalizing a layer with views still on it. Fix it by adding the created ivi_layout_surface to the ivi_surface_list to remove the surfaces from the layer during shutdown. Furthermore, remove the ivi_layout_surface from the desktop surface and free it when the desktop surface is destroyed. Signed-off-by: Michael Tretter --- ivi-shell/ivi-shell.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/ivi-shell/ivi-shell.c b/ivi-shell/ivi-shell.c index b18e78013..93777ca8c 100644 --- a/ivi-shell/ivi-shell.c +++ b/ivi-shell/ivi-shell.c @@ -537,6 +537,8 @@ desktop_surface_added(struct weston_desktop_surface *surface, ivisurf->layout_surface = layout_surface; ivisurf->surface = weston_surf; + wl_list_insert(&shell->ivi_surface_list, &ivisurf->link); + /* * initialize list as well as link. The latter allows to use * wl_list_remove() event when this surface is not in another list. @@ -557,6 +559,8 @@ desktop_surface_removed(struct weston_desktop_surface *surface, assert(ivisurf != NULL); + weston_desktop_surface_set_user_data(surface, NULL); + wl_list_for_each_safe(ivisurf_child, tmp, &ivisurf->children_list, children_link) { wl_list_remove(&ivisurf_child->children_link); @@ -566,6 +570,10 @@ desktop_surface_removed(struct weston_desktop_surface *surface, if (ivisurf->layout_surface) layout_surface_cleanup(ivisurf); + + wl_list_remove(&ivisurf->link); + + free(ivisurf); } static void