diff options
author | Peter Hutterer <peter.hutterer@who-t.net> | 2013-07-12 14:10:10 +1000 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2013-07-17 14:27:26 +1000 |
commit | 0e3be0b25fcfeff386bad132526352c2e45f1932 (patch) | |
tree | ae4362c1dd9a528615eb25e6c7c06cdb2a4798cc /dix | |
parent | 24cbb47ca80cd7a47749ece0ff3a98657ddf3ae3 (diff) |
dix: UpdateTouchesForGrab must only free the listener grab if it is non-NULL
If a client calls XIGrabDevice in response to a ButtonPress event (regular
event selection), the device will have a grab, but listener->grab is NULL.
Check for that, to avoid logspam.
[ 26293.863] (EE) BUG: triggered 'if (!pGrab)'
[ 26293.863] (EE) BUG: grabs.c:256 in FreeGrab()
[ 26293.863] (EE)
[ 26293.863] (EE) Backtrace:
[ 26293.864] (EE) 0: /usr/bin/Xorg (FreeGrab+0x54) [0x45d3fc]
[ 26293.864] (EE) 1: /usr/bin/Xorg (UpdateTouchesForGrab+0x135) [0x447d4e]
[ 26293.864] (EE) 2: /usr/bin/Xorg (ActivatePointerGrab+0x1ba) [0x447f3d]
[ 26293.864] (EE) 3: /usr/bin/Xorg (GrabDevice+0x3e6) [0x4503bc]
[ 26293.864] (EE) 4: /usr/bin/Xorg (ProcXIGrabDevice+0x1f9) [0x5981b1]
[ 26293.865] (EE) 5: /usr/bin/Xorg (ProcIDispatch+0x78) [0x58aa17]
[ 26293.865] (EE) 6: /usr/bin/Xorg (Dispatch+0x30d) [0x43347e]
[ 26293.865] (EE) 7: /usr/bin/Xorg (main+0x61d) [0x498175]
[ 26293.865] (EE) 8: /lib64/libc.so.6 (__libc_start_main+0xf5) [0x3df5621b75]
[ 26293.865] (EE) 9: /usr/bin/Xorg (_start+0x29) [0x423a19]
[ 26293.866] (EE) 10: ? (?+0x29) [0x29]
[ 26293.866] (EE)
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'dix')
-rw-r--r-- | dix/events.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/dix/events.c b/dix/events.c index 03b2d2ea7..ed3138d07 100644 --- a/dix/events.c +++ b/dix/events.c @@ -1441,7 +1441,8 @@ UpdateTouchesForGrab(DeviceIntPtr mouse) listener->type = LISTENER_POINTER_GRAB; else listener->type = LISTENER_GRAB; - FreeGrab(listener->grab); + if (listener->grab) + FreeGrab(listener->grab); listener->grab = AllocGrab(grab); } } |