Bug#147898: xlibs: select() hangs in XDrawString16() when using TrueType with Xinerama
Package: xlibs-data
Version: 4.3.0-7
Severity: normal
Followup-For: Bug #147898
Hi,
this bug has been fixed upstream, see
http://bugzilla.xfree86.org/show_bug.cgi?id=260
This bugreport contains a backported fix from Mdk for XFree86 4.3.0,
and here is another one shipped by RH (4.3.0-55).
I cannot test these patches myself.
Denis
Created by Mike A. Harris <mharris@redhat.com>
This patch is backported from post 4.3.0 CVS from cvsps patchset 11329.
This patch fixes XFree86 bugzilla bug #260
---------------------
PatchSet 11329
Date: 2003/07/07 16:34:20
Author: eich
Branch: HEAD
Tag: (none)
Log:
282. Fixing deadlock in libXi - when is called _XLockDisplay() twice - when
calling a Xi function that calls XGetExtensionVersion() (Bugzilla #260,
Bastien Nocera, Owen Taylor).
Members:
lib/Xi/XExtInt.c:3.7->3.8
lib/Xi/XGetVers.c:3.4->3.5
lib/Xi/XIint.h:3.1->3.2
diff -u xc/lib/Xi/XExtInt.c:3.7 xc/lib/Xi/XExtInt.c:3.8
--- xc/lib/Xi/XExtInt.c:3.7 Tue Oct 15 20:37:28 2002
+++ xc/lib/Xi/XExtInt.c Mon Jul 7 11:34:22 2003
@@ -196,7 +196,7 @@
return (-1);
}
((XInputData *) info->data)->vers =
- XGetExtensionVersion (dpy, "XInputExtension");
+ _XiGetExtensionVersion (dpy, "XInputExtension");
}
if (versions[version_index].major_version > Dont_Check)
diff -u xc/lib/Xi/XGetVers.c:3.4 xc/lib/Xi/XGetVers.c:3.5
--- xc/lib/Xi/XGetVers.c:3.4 Tue Oct 15 20:37:29 2002
+++ xc/lib/Xi/XGetVers.c Mon Jul 7 11:34:22 2003
@@ -71,12 +71,33 @@
char *name;
#endif
{
+ XExtensionVersion *ext;
+
+ LockDisplay (dpy);
+ ext = _XiGetExtensionVersion (dpy, name);
+ if (ext != NoSuchExtension) { /* This is unlocked in _XiCheckExtInit() */
+ UnlockDisplay (dpy);
+ SyncHandle();
+ }
+ return (ext);
+ }
+
+XExtensionVersion
+#if NeedFunctionPrototypes
+*_XiGetExtensionVersion (
+ register Display *dpy,
+ _Xconst char *name)
+#else
+*_XiGetExtensionVersion (dpy, name)
+ register Display *dpy;
+ char *name;
+#endif
+ {
xGetExtensionVersionReq *req;
xGetExtensionVersionReply rep;
XExtensionVersion *ext;
XExtDisplayInfo *info = XInput_find_display (dpy);
- LockDisplay (dpy);
if (_XiCheckExtInit(dpy, Dont_Check) == -1)
return ((XExtensionVersion *) NoSuchExtension);
@@ -89,8 +110,6 @@
if (! _XReply (dpy, (xReply *) &rep, 0, xTrue))
{
- UnlockDisplay(dpy);
- SyncHandle();
return (XExtensionVersion *) NULL;
}
ext = (XExtensionVersion *) Xmalloc (sizeof (XExtensionVersion));
@@ -103,8 +122,6 @@
ext->minor_version = rep.minor_version;
}
}
- UnlockDisplay(dpy);
- SyncHandle();
return (ext);
}
diff -u xc/lib/Xi/XIint.h:3.1 xc/lib/Xi/XIint.h:3.2
--- xc/lib/Xi/XIint.h:3.1 Tue Jul 31 20:44:39 2001
+++ xc/lib/Xi/XIint.h Mon Jul 7 11:34:22 2003
@@ -21,4 +21,11 @@
#endif
);
+extern XExtensionVersion * _XiGetExtensionVersion(
+#if NeedFunctionPrototypes
+ Display*,
+ _Xconst char*
+#endif
+);
+
#endif
Reply to: