[PATCH libXi 2/2] XIPassiveGrab: Fix completely broken locking in XIGrabTouchBegin
walter harms
wharms at bfs.de
Wed Jul 9 00:23:54 PDT 2014
Am 08.07.2014 23:01, schrieb Jasper St. Pierre:
> _XIPassiveGrabDevice calls LockDisplay as the first thing it does. That
> means that it expects the display to be unlocked. XIGrabTouchBegin locks
> the display to check for the XI extension, and then never unlocks it.
> Effectively, this meant that anybody that called XIGrabTouchBegin after
> XInitThreads just got a deadlock.
>
> Cool.
> ---
> src/XIPassiveGrab.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/src/XIPassiveGrab.c b/src/XIPassiveGrab.c
> index f3a9924..88f1aff 100644
> --- a/src/XIPassiveGrab.c
> +++ b/src/XIPassiveGrab.c
> @@ -166,6 +166,7 @@ XIGrabTouchBegin(Display *dpy, int deviceid, Window grab_window,
> LockDisplay(dpy);
> if (_XiCheckExtInit(dpy, XInput_2_2, extinfo) == -1)
> return -1;
> + UnlockDisplay(dpy);
>
> /* FIXME: allow selection of GrabMode for paired devices? */
> return _XIPassiveGrabDevice(dpy, deviceid, XIGrabtypeTouchBegin, 0,
I am not an expert on this but you should unlock the display on error also.
I would do it this way:
LockDisplay(dpy);
err=_XiCheckExtInit(dpy, XInput_2_2, extinfo);
UnlockDisplay(dpy);
if (err == -1)
return -1;
jz'ust my 2 cents
re,
wh
More information about the xorg-devel
mailing list