Commit 29c77457 authored by Michal Srb's avatar Michal Srb Committed by Peter Hutterer

Refactor XGetExtensionVersion.

_XiGetExtensionVersion was called from XGetExtensionVersion and from
_XiCheckExtInit. When called from _XiCheckExtInit, nothing accounted for the
fact that it can return ((XExtensionVersion *) NoSuchExtension) in case of
error. Also it recursively calls _XiCheckExtInit potentionally causing multiple
unlocks if _XiCheckExtInit fails.
-> Remove it and call directly _XiGetExtensionVersionRequest and only call
_XiCheckExtInit only from XGetExtensionVersion.
Signed-off-by: default avatarMichal Srb <msrb@suse.com>
Signed-off-by: Peter Hutterer's avatarPeter Hutterer <peter.hutterer@who-t.net>
parent 5810d079
......@@ -380,7 +380,7 @@ _XiCheckExtInit(
return (-1);
}
((XInputData *) info->data)->vers =
_XiGetExtensionVersion(dpy, "XInputExtension", info);
_XiGetExtensionVersionRequest(dpy, "XInputExtension", info->codes->major_opcode);
}
if (_XiCheckVersion(info, version_index) < 0) {
......
......@@ -68,12 +68,16 @@ XGetExtensionVersion(register Display * dpy, _Xconst char *name)
XExtDisplayInfo *info = XInput_find_display(dpy);
LockDisplay(dpy);
ext = _XiGetExtensionVersion(dpy, name, info);
if (ext != (XExtensionVersion *) NoSuchExtension) {
UnlockDisplay(dpy);
SyncHandle();
}
return (ext);
if (_XiCheckExtInit(dpy, Dont_Check, info) == -1)
return NULL;
ext = _XiGetExtensionVersionRequest(dpy, name, info->codes->major_opcode);
UnlockDisplay(dpy);
SyncHandle();
return ext;
}
_X_HIDDEN XExtensionVersion*
......@@ -91,7 +95,7 @@ _XiGetExtensionVersionRequest(Display *dpy, _Xconst char *name, int xi_opcode)
_XSend(dpy, name, (long)req->nbytes);
if (!_XReply(dpy, (xReply *) & rep, 0, xTrue)) {
return (XExtensionVersion *) NULL;
return NULL;
}
ext = (XExtensionVersion *) Xmalloc(sizeof(XExtensionVersion));
......@@ -105,13 +109,3 @@ _XiGetExtensionVersionRequest(Display *dpy, _Xconst char *name, int xi_opcode)
return ext;
}
_X_HIDDEN XExtensionVersion *
_XiGetExtensionVersion(register Display * dpy, _Xconst char *name,
XExtDisplayInfo *info)
{
if (_XiCheckExtInit(dpy, Dont_Check, info) == -1)
return ((XExtensionVersion *) NoSuchExtension);
return _XiGetExtensionVersionRequest(dpy, name, info->codes->major_opcode);
}
......@@ -29,7 +29,6 @@ extern XExtDisplayInfo *XInput_find_display(Display *);
extern int _XiCheckExtInit(Display *, int, XExtDisplayInfo *);
extern int _XiCheckVersion(XExtDisplayInfo *info, int version_index);
extern XExtensionVersion *_XiGetExtensionVersion(Display *, _Xconst char *, XExtDisplayInfo *);
extern XExtensionVersion* _XiGetExtensionVersionRequest(Display *dpy, _Xconst char *name, int xi_opcode);
extern Status _xiQueryVersion(Display *dpy, int*, int*, XExtDisplayInfo *);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment