[Wayland-bugs] [Bug 65961] SIGSEGV in weston-desktop-shell when client is stopped

bugzilla-daemon at freedesktop.org bugzilla-daemon at freedesktop.org
Wed Jul 3 22:12:50 PDT 2013


https://bugs.freedesktop.org/show_bug.cgi?id=65961

Kristian Høgsberg <krh at bitplanet.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|---                         |FIXED

--- Comment #5 from Kristian Høgsberg <krh at bitplanet.net> ---
There's a few crashes at work here.  First, the weston crash happens when the
desktop-shell helper client crashes too fast and we give up trying to re-launch
it.  At that point shell.c doesn't have a desktop-shell to talk to.  It tries
anyway to set the grab cursor (for example, when moving a window or setting the
busy cursor) and crashes.  If the desktop-shell client is gone, the best we can
do is just not setting the cursor:

commit c9974a0796fe2934299f10dc3a879d29c7045859
Author: Kristian Høgsberg <krh at bitplanet.net>
Date:   Wed Jul 3 19:24:57 2013 -0400

    shell: Dont set grab cursor if desktop-shell client died

    If we don't have a desktop-shell helper client, don't try to send events
    to it.

Next, the reason desktop-shell dies in the first place is that it gets a motion
event with coordinates outside the surface for the cursor dummy surface. 
That's why the widget is NULL, but this shouldn't happen, so the NULL check in
attachment 81102 is papering over a deeper problem.  What happens is that the
default_grab focus handler ends up triggering handle_pointer_focus in shell.c,
which recognizes the unresponsive surface and starts the busy cursor grab. 
However, when returning to notify_motion in input.c, we have a cached value of
the previous grab (the default grab) in the 'interface' local var, and thus
calls default_grab_motion, even though the new current grab is the busy cursor
grab.  This means that the cursor surface gets a motion event, which should
never happen and triggers the desktop-shell crash:

commit da751b8f9a16177b56399f10ca193b4c8b746ad8
Author: Kristian Høgsberg <krh at bitplanet.net>
Date:   Thu Jul 4 00:58:07 2013 -0400

    input: Don't cache pointer grab interface between calls to focus and motion

    The focus callback for the current grab can change the grab, so we have
    to make sure we call the motion callback for the currently active grab.

    https://bugs.freedesktop.org/show_bug.cgi?id=65961

-- 
You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/wayland-bugs/attachments/20130704/0213c885/attachment.html>


More information about the Wayland-bugs mailing list