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
_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel