summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJamey Sharp <jamey@minilop.net>2006-10-15 00:03:57 -0700
committerJamey Sharp <jamey@minilop.net>2006-10-15 00:33:41 -0700
commit5dda1e1509d40ef64ebc816ce538cef462a4fa51 (patch)
treefc77232bf21e59247e95f77f0177a4114b0327a1
parent8e317d390d1ef8f2c072957355b5d71db3b89c43 (diff)
downloadxorg-lib-libXi-5dda1e1509d40ef64ebc816ce538cef462a4fa51.tar.gz
Don't call XInput_find_display in _XiGetExtensionVersion, while the Display lock is held.
_XiGetExtensionVersion has two callers. One had already called XInput_find_display, and the other could easily do so outside the Display lock. So I change the _XiGetExtensionVersion interface to accept a previously-computed XExtDisplayInfo from the caller. Besides being more correct, this should be slightly faster. :-) Thanks to Magnus Kessler <Magnus.Kessler@gmx.net> for identifying the bug and proposing a workaround.
-rw-r--r--src/XExtInt.c2
-rw-r--r--src/XGetVers.c6
-rw-r--r--src/XIint.h2
3 files changed, 5 insertions, 5 deletions
diff --git a/src/XExtInt.c b/src/XExtInt.c
index e5baccb..aa838ef 100644
--- a/src/XExtInt.c
+++ b/src/XExtInt.c
@@ -207,7 +207,7 @@ _XiCheckExtInit(dpy, version_index)
return (-1);
}
((XInputData *) info->data)->vers =
- _XiGetExtensionVersion(dpy, "XInputExtension");
+ _XiGetExtensionVersion(dpy, "XInputExtension", info);
}
if (versions[version_index].major_version > Dont_Check) {
diff --git a/src/XGetVers.c b/src/XGetVers.c
index 1f4fd7a..ef41fea 100644
--- a/src/XGetVers.c
+++ b/src/XGetVers.c
@@ -64,9 +64,10 @@ XExtensionVersion *
XGetExtensionVersion(register Display * dpy, _Xconst char *name)
{
XExtensionVersion *ext;
+ XExtDisplayInfo *info = XInput_find_display(dpy);
LockDisplay(dpy);
- ext = _XiGetExtensionVersion(dpy, name);
+ ext = _XiGetExtensionVersion(dpy, name, info);
if (ext != (XExtensionVersion *) NoSuchExtension) {
UnlockDisplay(dpy);
SyncHandle();
@@ -75,12 +76,11 @@ XGetExtensionVersion(register Display * dpy, _Xconst char *name)
}
XExtensionVersion *
-_XiGetExtensionVersion(register Display * dpy, _Xconst char *name)
+_XiGetExtensionVersion(register Display * dpy, _Xconst char *name, XExtDisplayInfo *info)
{
xGetExtensionVersionReq *req;
xGetExtensionVersionReply rep;
XExtensionVersion *ext;
- XExtDisplayInfo *info = XInput_find_display(dpy);
if (_XiCheckExtInit(dpy, Dont_Check) == -1)
return ((XExtensionVersion *) NoSuchExtension);
diff --git a/src/XIint.h b/src/XIint.h
index ba965a6..ae6d33f 100644
--- a/src/XIint.h
+++ b/src/XIint.h
@@ -12,6 +12,6 @@ extern XExtDisplayInfo *XInput_find_display(Display *);
extern int _XiCheckExtInit(Display *, int);
-extern XExtensionVersion *_XiGetExtensionVersion(Display *, _Xconst char *);
+extern XExtensionVersion *_XiGetExtensionVersion(Display *, _Xconst char *, XExtDisplayInfo *);
#endif