'Twas brillig, and Colin Guthrie at 17/09/10 09:42 did gyre and gimble: > 'Twas brillig, and Colin Guthrie at 17/09/10 09:22 did gyre and gimble: >> I guess it's likely some resurfacing of something similar to this. >> >> >> So I think that's all a red herring. > > Go go gadget contradict-o-tron. > > Ignore the first line, I think those bugs are likely unrelated. > > I wonder if perhaps it's a problem that there are no screens :s > > Perhaps calling: > > xcb_setup_roots_length() first and checking the value to see if it's > 0 > would avoid the problems? > > Actually in looking at this I think I can see how to fix the missing > functionality in the master version which appears to check additional > screens of the display. I'm obviously only chekcing the first, with this > patch (as did 0.9.21) but git master checks additional screens. > > I guess checking for the length is a valid thing to do. > > Are you able to reproduce the bug yourself? > > > > Col Looking at the implementation of xcb_setup_vendor_end, it ultimately dereferences *R: xcb_generic_iterator_t xcb_setup_vendor_end (const xcb_setup_t *R /**< */) { xcb_generic_iterator_t i; i.data = ((char *) (R + 1)) + (R->vendor_len); i.rem = 0; i.index = (char *) i.data - (char *) R; return i; } Now we make sure the xcb connection itself is fine when we use it but I do not check the return value of xcb_get_setup() (as it was not checked in the tutorial). Accroding to it's implementation however: const xcb_setup_t *xcb_get_setup(xcb_connection_t *c) { if(c->has_error) return 0; /* doesn't need locking because it's never written to. */ return c->setup; } It can easily return 0. I guess I need to deal with that case. Should be a simple patch. I'll get something out later today. Col -- Colin Guthrie gmane(at)colin.guthr.ie http://colin.guthr.ie/ Day Job: Tribalogic Limited [http://www.tribalogic.net/] Open Source: Mandriva Linux Contributor [http://www.mandriva.com/] PulseAudio Hacker [http://www.pulseaudio.org/] Trac Hacker [http://trac.edgewall.org/]