It seems xcb/x11 have some bugs related to sizeof(long), in concrete
using 32 bit variables for dpy->request et al in AMD64.

This patch fixes some crashes for me.

diff -ur libx11-1.1.99.2/src/xcb_io.c libx11-1.1.99.2-a/src/xcb_io.c
--- libx11-1.1.99.2/src/xcb_io.c        2008-11-04 20:52:54.000000000 +0100
+++ libx11-1.1.99.2-a/src/xcb_io.c      2009-02-20 02:58:02.000000000 +0100
@@ -214,7 +214,7 @@
                }
                else if(req && xcb_poll_for_reply(dpy->xcb->connection, 
req->sequence, &reply, &error))
                {
-                       unsigned int sequence = req->sequence;
+                       uint64_t sequence = req->sequence;
                        if(!reply)
                        {
                                dpy->xcb->pending_requests = req->next;
@@ -300,7 +300,7 @@
         * we need to remember to check later. */
        if(dpy->xcb->event_owner != XlibOwnsEventQueue || dpy->async_handlers)
        {
-               unsigned int sequence;
+               uint64_t sequence;
                for(sequence = dpy->xcb->last_flushed; sequence < dpy->request; 
++sequence)
                {
                        PendingRequest *req = malloc(sizeof(PendingRequest));


I've used uint64_t instead unsigned long as it seems preferred through the 
codebase.

Note that both req->sequence and dpy->request are defined as unsigned long.

Regards,

Emilio

Attachment: pgp6knhbc4LLg.pgp
Description: PGP signature

_______________________________________________
xorg mailing list
xorg@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/xorg

Reply via email to