On Mon, Apr 15, 2013 at 09:09:54PM +0200, Philipp Brüschweiler wrote:
> Fixes a segfault. Steps to reproduce:
> 
> * start weston with the x11 backend
> * open a terminal
> * click on the icon in the top left corner, choose close
> * close the x11 window containing weston
> ---
>  src/shell.c | 3 +++
>  1 file changed, 3 insertions(+)

Ok, I see.  This is to make sure the destroy_shell_seat() code doesn't
kick in if the popup grab is no longer active.  Thanks for tracking it
down, I've seen the crashes too and I'm happy to see it fixed.

I think we'll need to have a second look at that code path after 1.1
is out.  If the entire seat goes away, we do want to send out
popup_done, and we can reuse popup_grab_end() in destroy_shell_seat()
then.

Kristian

> diff --git a/src/shell.c b/src/shell.c
> index de5d6f6..9d0ae02 100644
> --- a/src/shell.c
> +++ b/src/shell.c
> @@ -1986,6 +1986,8 @@ popup_grab_end(struct wl_pointer *pointer)
>       if (pointer->grab->interface == &popup_grab_interface) {
>               wl_pointer_end_grab(grab->pointer);
>               shseat->popup_grab.client = NULL;
> +             shseat->popup_grab.grab.interface = NULL;
> +             assert(!wl_list_empty(&shseat->popup_grab.surfaces_list));
>               /* Send the popup_done event to all the popups open */
>               wl_list_for_each(shsurf, &shseat->popup_grab.surfaces_list, 
> popup.grab_link) {
>                       wl_shell_surface_send_popup_done(&shsurf->resource);
> @@ -2028,6 +2030,7 @@ remove_popup_grab(struct shell_surface *shsurf)
>       wl_list_init(&shsurf->popup.grab_link);
>       if (wl_list_empty(&shseat->popup_grab.surfaces_list)) {
>               wl_pointer_end_grab(shseat->popup_grab.grab.pointer);
> +             shseat->popup_grab.grab.interface = NULL;
>       }
>  }
>  
> -- 
> 1.8.2.1
> 
> _______________________________________________
> wayland-devel mailing list
> [email protected]
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
_______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to