[cairo] buggy_repeat for Xorg servers < 1.4
Carl Worth
cworth at cworth.org
Fri Apr 4 11:44:45 PDT 2008
I've been trying to track down the "buggy_repeat" problem, (more
specifically that cairo's extend-reflect test can cause some X servers
to crash). And with a fresh install of Fedora 8 I've been able to
replicate the bug, and with an install of Fedora 9 Beta on the same
machine the bug appears to be gone.
I'm still hoping to come up with a minimal, non-cairo-using test case
for the X server crash, (which will let us more easily explore exactly
where the bug is/was).
But in the meantime, here's the patch I just pushed out to cairo. It
captures the information I described above, (but in a bit more detail
with the server versions as extracted from Fedora 8 and 9 Beta).
If anyone has any more details about where cairo's extend-reflect test
case crashes, (or doesn't crash), an X server, that would be
appreciated.
-Carl
commit 80f7aa03b35921a96683a0442f885c4b8335f3d9
Author: Carl Worth <cworth at cworth.org>
Date: Fri Apr 4 11:29:47 2008 -0700
Enable buggy_repeat workaround for X.Org servers < 1.4
This covers the known-to-broken 1.3 servers such as appeared
in Fedora 8. It also leaves the workaround off, (since it's
a severe slowdown), for the known-to-be-working 1.4.99.901
server as appears in Fedora 9 Betas.
diff --git a/src/cairo-xlib-display.c b/src/cairo-xlib-display.c
index 20bad2e..b1fc67e 100644
--- a/src/cairo-xlib-display.c
+++ b/src/cairo-xlib-display.c
@@ -298,6 +298,17 @@ _cairo_xlib_display_get (Display *dpy)
* back up to 6.7 or 6.8. */
if (VendorRelease (dpy) >= 60700000 && VendorRelease (dpy) <=
60802000)
display->buggy_repeat = TRUE;
+
+ /* But even the new modular server has bugs, (bad enough to
+ * crash the X server), that it so happens we can avoid with
+ * the exact same buggy_repeat workaround. We've verified that
+ * this bug exists as least as late as version 1.3.0.0, (which
+ * is in Fedora 8), and is gone again in version 1.4.99.901
+ * (from a Fedora 9 Beta). Versions between those are still
+ * unknown, but until we learn more, we'll assume that any 1.3
+ * version is buggy. */
+ if (VendorRelease (dpy) < 10400000)
+ display->buggy_repeat = TRUE;
} else if (strstr (ServerVendor (dpy), "XFree86") != NULL) {
if (VendorRelease (dpy) <= 40500000)
display->buggy_repeat = TRUE;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
Url : http://lists.cairographics.org/archives/cairo/attachments/20080404/019a606d/attachment.pgp
More information about the cairo
mailing list