[PATCH libXi 2/2] XIPassiveGrab: Fix completely broken locking in XIGrabTouchBegin

walter harms wharms at bfs.de
Wed Jul 9 03:31:28 PDT 2014



Am 09.07.2014 12:23, schrieb Jasper St. Pierre:
> _XiCheckExtInit already unlocks the display on error. Yes, it's terrible.
> 
> 

In this case,
it would be better to move the lock/unlock into _XiCheckExtInit.

re,
 wh


> On Wed, Jul 9, 2014 at 3:23 AM, walter harms <wharms at bfs.de> wrote:
> 
>>
>>
>> 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
>>
>> _______________________________________________
>> xorg-devel at lists.x.org: X.Org development
>> Archives: http://lists.x.org/archives/xorg-devel
>> Info: http://lists.x.org/mailman/listinfo/xorg-devel
>>
> 
> 
> 


More information about the xorg-devel mailing list