[Xcb] Assert in xcb_io.c:542

Jamey Sharp jamey at minilop.net
Tue Nov 3 23:42:28 PST 2009


On Tue, Nov 3, 2009 at 9:08 PM, Graeme Gill <graeme2 at argyllcms.com> wrote:
> % dispcal -v -q l -y l test
> dispcal: ../../src/xcb_io.c:542: _XRead: Assertion
> `dpy->xcb->reply_data != ((void *)0)' failed.
> zsh: abort (core dumped)  dispcal -v -q l -y l test

This is an assert in Xlib, and is another case of new libX11 checking
for caller errors that old libX11 didn't explicitly check.

When _XReply is called, Xlib knows (by looking at the length field)
how much data is in the reply. XCB-based libX11 verifies that the
caller doesn't try to read more out of the reply than the server
claimed to provide. That's the assertion you're failing here.

As far as I know, old libX11 should have started producing wrong
answers after that point, unless the buggy client code was matched by
buggy server code, or the client exits immediately after getting that
reply.

The first important thing to do, if that description didn't already
point you in the right direction, is to get a stack trace, with
debugging symbols for libX11 and for whatever code is calling it when
the assertion fires.

Bonus points for also getting a network trace to see what protocol
went over the wire there; I like using wireshark for that. A network
trace from a successful run (with a non-XCB-based libX11, perhaps)
might also help.

If there turns out to be an X server bug here, it'd also be good to
know what server version is running, such as from xdpyinfo.

Jamey


More information about the Xcb mailing list