diff options
author | Peter Hutterer <peter.hutterer@who-t.net> | 2013-05-03 15:07:58 +1000 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2013-05-09 09:19:48 +1000 |
commit | de12ce91d8e44ab9398e730b457e5abc8d1acbe6 (patch) | |
tree | 12e231da70a39f66b1e7ccbfa622b82555d8645d | |
parent | 703c9238dd17a9755a001a537b46dec9721dda24 (diff) |
dix: fix cursor refcountingtouch-grab-race-condition-56578-v2
The cursor is referenced during CopyGrab(), thus doesn't need to be handled
manually anymore. It does need to be refcounted for temp grabs though.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-rw-r--r-- | dix/events.c | 7 |
1 files changed, 2 insertions, 5 deletions
diff --git a/dix/events.c b/dix/events.c index 7464db586..fce7c4b34 100644 --- a/dix/events.c +++ b/dix/events.c @@ -1491,9 +1491,6 @@ ActivatePointerGrab(DeviceIntPtr mouse, GrabPtr grab, grabinfo->grabTime = syncEvents.time; else grabinfo->grabTime = time; - if (grab->cursor) - grab->cursor->refcnt++; - BUG_WARN(grabinfo->grab != NULL); grabinfo->grab = AllocGrab(grab); grabinfo->fromPassiveGrab = isPassive; grabinfo->implicitGrab = autoGrab & ImplicitGrabMask; @@ -1552,8 +1549,6 @@ DeactivatePointerGrab(DeviceIntPtr mouse) if (grab->confineTo) ConfineCursorToWindow(mouse, GetCurrentRootWindow(mouse), FALSE, FALSE); PostNewCursor(mouse); - if (grab->cursor) - FreeCursor(grab->cursor, (Cursor) 0); if (!wasImplicit && grab->grabtype == XI2) ReattachToOldMaster(mouse); @@ -5107,6 +5102,8 @@ GrabDevice(ClientPtr client, DeviceIntPtr dev, xi2mask_merge(tempGrab->xi2mask, mask->xi2mask); tempGrab->device = dev; tempGrab->cursor = cursor; + if (cursor) + tempGrab->cursor->refcnt++; tempGrab->confineTo = confineTo; tempGrab->grabtype = grabtype; (*grabInfo->ActivateGrab) (dev, tempGrab, time, FALSE); |