更新fedora 8以后,由于libxcb-xlib0的更新,一些视窗程式会发生assertion ,像是java , vmware,臃肿,matlab等会都有影响.
java: xcb_xlib.c:50: xcb_xlib_unlock: Assertion `c->xlib.lock’ failed.
X protocol C-language Binding (xcb)取代xlib ,且提供transport layer让尚未修改的程式使用( Xlib/XCB ).但是如果原本使用xlib的程式没有照规矩来,就会发生assertion. JRE , vmware这些程式又不是说改就改,网路上的暂时解法两种,一个是退回xlib ,另外一个就是自己编译,把assert检查拿掉.
用后者的方法
得到libxcb-1.0.3.fc8.src.rpm
把其中的src/xcb_xlib.c的第41 , 50行assert都注解掉.
void xcb_xlib_lock(xcb_connection_t *c)
{
_xcb_lock_io(c);
// assert(!c->xlib.lock);
if (!c->xlib.lock) {
c->xlib.lock = 1;
c->xlib.thread = pthread_self();
}
_xcb_unlock_io(c);
}
void xcb_xlib_unlock(xcb_connection_t *c)
{
_xcb_lock_io(c);
// assert(c->xlib.lock);
if (c->xlib.lock) {
assert(pthread_equal(c->xlib.thread, pthread_self()));
c->xlib.lock = 0;
pthread_cond_broadcast(&c->xlib.cond);
}
_xcb_unlock_io(c);
}
安装之后, java, vmware都能执行

