From 0ae08175472acc203c55eaf886fa754901072108 Mon Sep 17 00:00:00 2001 From: Jamey Sharp Date: Sun, 15 Oct 2006 00:03:57 -0700 Subject: 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 for identifying the bug and proposing a workaround. --- src/XExtInt.c | 2 +- src/XGetVers.c | 6 +++--- src/XIint.h | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/XExtInt.c b/src/XExtInt.c index f9f2f96..29765ef 100644 --- a/src/XExtInt.c +++ b/src/XExtInt.c @@ -211,7 +211,7 @@ _XiCheckExtInit(dpy, version_index, info) 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 5fe3a87..d3c765a 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, info) == -1) return ((XExtensionVersion *) NoSuchExtension); diff --git a/src/XIint.h b/src/XIint.h index 0924a88..f35619c 100644 --- a/src/XIint.h +++ b/src/XIint.h @@ -12,6 +12,6 @@ extern XExtDisplayInfo *XInput_find_display(Display *); extern int _XiCheckExtInit(Display *, int, XExtDisplayInfo *); -extern XExtensionVersion *_XiGetExtensionVersion(Display *, _Xconst char *); +extern XExtensionVersion *_XiGetExtensionVersion(Display *, _Xconst char *, XExtDisplayInfo *); #endif -- cgit v1.2.3