[PATCH weston] shell: End grab if the grabbed shell surface has been destroyed

Eoff, Ullysses A ullysses.a.eoff at intel.com
Mon May 20 05:59:05 PDT 2013


Rob, I tried this same local modification on Friday... it seems to fix
Weston from segfaulting. However, I have another test case that
triggered this problem, too; only it crashes on the client-side as well.
The client-side crash did not disappear with this Weston modification,
which indicates there may be some deeper, underlying issue.

I'll point you to the test case soon, real soon ;-)

----
U. Artie 


> -----Original Message-----
> From: Rob Bradford [mailto:robert.bradford at intel.com]
> Sent: Monday, May 20, 2013 4:14 AM
> To: wayland-devel at lists.freedesktop.org; Eoff, Ullysses A
> Subject: Re: [PATCH weston] shell: End grab if the grabbed shell surface has been
> destroyed
> 
> I should add that although I think that this patch fixes the bug, i've
> written it by inspection of the code & backtraces only as I was unable
> to reproduce the issue. Artie, perhaps you could try this and give me
> a Tested-by if it resolves the problem.
> 
> Cheers,
> 
> Rob
> 
> On 20 May 2013 12:09, Rob Bradford <robert.bradford at intel.com> wrote:
> > From: Rob Bradford <rob at linux.intel.com>
> >
> > The shell_grab_start function sets up a destroy notification on the
> > shell surface such that when the shell surface is destroyed the pointer
> > on the grab to the shell surface is set to NULL.
> >
> > We must therefore check whether the shell surface is NULL and end the
> > grab if it is.
> >
> > https://bugs.freedesktop.org/show_bug.cgi?id=64689
> > ---
> >  src/shell.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/src/shell.c b/src/shell.c
> > index f5d5bff..7261570 100644
> > --- a/src/shell.c
> > +++ b/src/shell.c
> > @@ -1296,7 +1296,7 @@ busy_cursor_grab_focus(struct weston_pointer_grab
> *base)
> >                                                  pointer->x, pointer->y,
> >                                                  &sx, &sy);
> >
> > -       if (grab->shsurf->surface != surface) {
> > +       if (!grab->shsurf || grab->shsurf->surface != surface) {
> >                 shell_grab_end(grab);
> >                 free(grab);
> >         }
> > --
> > 1.8.1.4
> >


More information about the wayland-devel mailing list