[Xcb] mesa +xcb = assertion death

Jamey Sharp jamey at minilop.net
Fri Apr 29 13:59:50 PDT 2005


On Fri, 2005-04-29 at 04:44 -0400, Jeremy Kolb wrote:
> Okay.
> 
> In line 250 of xcb_in_read_packet we have:
> 
> c->in.request_read = (lastread & 0xffff0000) | genrep.sequence;
> 
> For some reason when it fails genrep has a response_type of 5, a 
> sequence of 0 and a length of 1.  This is when it should be pixing up 
> sequence 12 I believe.  Up until this point I get perfectly sane values 
> for this.
> 
> I don't know why it's getting this value for genrep.  But it causes the 
> next read to be 65536 since 0 & 0xffff = 65536.  And that's why the 
> assertion fires.

(For those less familiar with the code base, I'll mention that of
course, '0 & x == 0'. But yes, immediately after the line you quoted
we'll add 0x10000 to it in this case.)

Right. Wow. I suppose there's *some* way that could be my fault, but I'm
having trouble imagining how.

It sounds like you can very reliably reproduce this bug. Would you
capture a protocol trace using either 'xscope -v4' or some network
sniffer like Ethereal, and post a URL for it? I want to see if your X
server is really sending you a busted sequence number stream. Perhaps
XCB is getting misaligned somewhere (but I still can't imagine how).

> However I have no idea why the generic reply is returning 0 as a 
> sequence number, nor do I know what response_type 5 is.

Response type 5 is a ButtonRelease event. (0 is an error, 1 is a reply,
and everything else is an event; you can look up core events in
xproto.xml, xproto.h, or your friendly neighborhood X protocol
reference.)

> Maybe Jamey has an answer?

Not yet, but you're still doing a great job of troubleshooting.

One cool effect of this problem is that it's forcing me to write down a
lot of what I know about debugging these sorts of problems. :-) On the
other hand, it's a little disheartening to realize that I haven't found
many tricks that actually help. :-/

--Jamey



More information about the xcb mailing list