On Sat, Sep 21, 2013 at 06:08:28PM +0200, Giulio Camuffo wrote: > compositor.surface_list is recreated every redraw with the mapped > surfaces, but if a surface gets unmapped and then in the same frame > weston_compositor_pick_surface() is called we must make sure it > does not pick the unmapped surface, since it traverses the > surface_list to find one. > If after the unmap the surface gets also deleted it's even more > important, as it must not pick a destroyed surface.
We have a call to weston_compositor_build_surface_list() in after the call to weston_surface_unmap() in weston_surface_destroy(), but we should be able to keep the list uptodate as we unmap surfaces. I think we did it "just to be safe", but your patch should be enough and if it isn't I want to find out what we're missing. I'll push your patch and then remove the rebuild of the surface list in weston_surface_destroy(). Kristian > --- > src/compositor.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/src/compositor.c b/src/compositor.c > index a1c01fb..fefa001 100644 > --- a/src/compositor.c > +++ b/src/compositor.c > @@ -994,6 +994,8 @@ weston_surface_unmap(struct weston_surface *surface) > surface->mapped = 0; > surface->output = NULL; > wl_list_remove(&surface->layer_link); > + wl_list_remove(&surface->link); > + wl_list_init(&surface->link); > > wl_list_for_each(seat, &surface->compositor->seat_list, link) { > if (seat->keyboard && seat->keyboard->focus == surface) > -- > 1.8.4 > > _______________________________________________ > wayland-devel mailing list > wayland-devel@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/wayland-devel _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel