[PATCH] compositor: unmap subsurface views before destroying the subsurfaces

George Kiagiadakis george.kiagiadakis at collabora.com
Fri Jun 13 09:10:26 PDT 2014


This is to avoid recursing into weston_compositor_build_view_list()
and therefore fix crashing when destroying a stack of visible subsurfaces
due to weston_compositor_build_view_list() being called recursively
and corrupting the lists it works on.

https://bugs.freedesktop.org/show_bug.cgi?id=79684
---
 src/compositor.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/compositor.c b/src/compositor.c
index 3c5c8e3..2fbfdbf 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -1662,8 +1662,10 @@ surface_free_unused_subsurface_views(struct weston_surface *surface)
 		if (sub->surface == surface)
 			continue;
 
-		wl_list_for_each_safe(view, nv, &sub->unused_views, surface_link)
+		wl_list_for_each_safe(view, nv, &sub->unused_views, surface_link) {
+			weston_view_unmap (view);
 			weston_view_destroy(view);
+		}
 
 		surface_free_unused_subsurface_views(sub->surface);
 	}
@@ -2764,8 +2766,10 @@ weston_subsurface_destroy(struct weston_subsurface *sub)
 		assert(sub->parent_destroy_listener.notify ==
 		       subsurface_handle_parent_destroy);
 
-		wl_list_for_each_safe(view, next, &sub->surface->views, surface_link)
+		wl_list_for_each_safe(view, next, &sub->surface->views, surface_link) {
+			weston_view_unmap(view);
 			weston_view_destroy(view);
+		}
 
 		if (sub->parent)
 			weston_subsurface_unlink_parent(sub);
-- 
2.0.0



More information about the wayland-devel mailing list