[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


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
    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) <=
            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, (which
+        * is in Fedora 8), and is gone again in version
+        * (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