2013/9/22 Kristian Høgsberg <hoegsb...@gmail.com>: > 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.
Also, that weston_compositor_build_surface_list() wasn't called if the unmap was a result of a previous explicit wl_surface_attach(0) call ("wl_surface_attach(0); wl_surface_destroy()" from the client side), because the "if (weston_surface_is_mapped(surface))" failed. Giulio > > 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