r1844 - in trunk: . libxcb

dnicholson at linuxfromscratch.org dnicholson at linuxfromscratch.org
Sun Jul 8 17:48:20 PDT 2007


Author: dnicholson
Date: 2007-07-08 18:48:20 -0600 (Sun, 08 Jul 2007)
New Revision: 1844

Added:
   trunk/libxcb/
   trunk/libxcb/libxcb-1.0-sloppy_lock-1.patch
Log:
Patch to workaround X11 locking bugs asserted with libxcb


Added: trunk/libxcb/libxcb-1.0-sloppy_lock-1.patch
===================================================================
--- trunk/libxcb/libxcb-1.0-sloppy_lock-1.patch	                        (rev 0)
+++ trunk/libxcb/libxcb-1.0-sloppy_lock-1.patch	2007-07-09 00:48:20 UTC (rev 1844)
@@ -0,0 +1,62 @@
+Submitted By: Dan Nicholson <dnicholson AT linuxfromscratch DOT org>
+Date: 2007-07-08
+Initial Package Version: 1.0
+Upstream Status: Will not apply.
+Origin: OpenSuSE
+  http://download.opensuse.org/distribution/SL-OSS-factory/inst-source/suse/src/xorg-x11-libxcb-7.2-33.src.rpm
+Description: This is a workaround for X11 applications which have locking bugs
+  that will trigger assertions when libxcb is used. An environment variable,
+  LIBXCB_ALLOW_SLOPPY_LOCK, can be set to skip the check that the display lock
+  has been set correctly. This will not be merged upstream as the XCB
+  developers have decided to be strict in exposing the bugs so they are fixed
+  in the appropriate location.
+
+diff -pNur libxcb-1.0.orig/src/xcb_conn.c libxcb-1.0/src/xcb_conn.c
+--- libxcb-1.0.orig/src/xcb_conn.c	2006-11-21 20:18:48.000000000 -0800
++++ libxcb-1.0/src/xcb_conn.c	2007-07-08 17:29:46.000000000 -0700
+@@ -62,6 +62,11 @@ static int set_fd_flags(const int fd)
+ static int _xcb_xlib_init(_xcb_xlib *xlib)
+ {
+     xlib->lock = 0;
++    xlib->sloppy_lock = 0;
++
++    if (getenv("LIBXCB_ALLOW_SLOPPY_LOCK"))
++        xlib->sloppy_lock = 1;
++
+     pthread_cond_init(&xlib->cond, 0);
+     return 1;
+ }
+diff -pNur libxcb-1.0.orig/src/xcbint.h libxcb-1.0/src/xcbint.h
+--- libxcb-1.0.orig/src/xcbint.h	2006-11-20 23:06:29.000000000 -0800
++++ libxcb-1.0/src/xcbint.h	2007-07-08 17:29:46.000000000 -0700
+@@ -130,6 +130,7 @@ int _xcb_in_read_block(xcb_connection_t 
+ 
+ typedef struct _xcb_xlib {
+     int lock;
++    int sloppy_lock;
+     pthread_t thread;
+     pthread_cond_t cond;
+ } _xcb_xlib;
+diff -pNur libxcb-1.0.orig/src/xcb_xlib.c libxcb-1.0/src/xcb_xlib.c
+--- libxcb-1.0.orig/src/xcb_xlib.c	2006-11-02 17:38:00.000000000 -0800
++++ libxcb-1.0/src/xcb_xlib.c	2007-07-08 17:29:46.000000000 -0700
+@@ -38,7 +38,8 @@ unsigned int xcb_get_request_sent(xcb_co
+ void xcb_xlib_lock(xcb_connection_t *c)
+ {
+     _xcb_lock_io(c);
+-    assert(!c->xlib.lock);
++    if (!c->xlib.sloppy_lock)
++	    assert(!c->xlib.lock);
+     c->xlib.lock = 1;
+     c->xlib.thread = pthread_self();
+     _xcb_unlock_io(c);
+@@ -47,7 +48,8 @@ void xcb_xlib_lock(xcb_connection_t *c)
+ void xcb_xlib_unlock(xcb_connection_t *c)
+ {
+     _xcb_lock_io(c);
+-    assert(c->xlib.lock);
++    if (!c->xlib.sloppy_lock)
++	assert(c->xlib.lock);
+     assert(pthread_equal(c->xlib.thread, pthread_self()));
+     c->xlib.lock = 0;
+     pthread_cond_broadcast(&c->xlib.cond);




More information about the patches mailing list