[xcb] XCB polling and single-threadedness

Bart Massey xcb@nickle.org
Sun, 07 Jul 2002 02:49:12 -0700


AFAIK, XCBPollEvent() should not cause a select() on the
socket, just non-blocking reads until empty.  But I agree
with Jamey's general architecture.  Nice catch!

	Bart

In message <1026034404.502.139.camel@zoo> you wrote:
> Hey all!
> 
> Good job, Andy. Unfortunately, XCBReadPacket doesn't work the way you
> think it does. Sorry. :) I've added some comments in an attempt to make
> future readers think it works the way it does. :)
> 
> For a complete XCBPollEvent implementation - which I need for XCL
> anyway, so I'm glad this came up - it should also cause a non-blocking
> read of the socket. XCBWait won't do, because it calls select and asks
> it to wait forever. XCBReadEvent won't do, because (and here was the
> confusion) it never accesses the socket at all.
> 
> As it happens, PollEvent can work without this non-blocking read - I've
> updated test/main.c to call it occasionally - but applications may fail
> in mysterious ways until it's fixed.
> 
> The best solution is probably to make the select timeout parameter be
> passed to XCBWait. Current callers would pass a 0 there, while PollEvent
> would pass the address of a struct indicating a 0 second timeout.
> Perhaps you could take care of this too, Andy?
> 
> Thanks!
> 
> -Jamey
> 
> On Sat, 2002-07-06 at 18:58, Andy Howe wrote:
> > XCBGenericEvent *XCBPollEvent(XCBConnection *c);
> > 
> > If there are any events currently in the queue, the first event is
> > returned. Otherwise, a null pointer is returned. Basicly, it works the
> > same as XCBWaitEvent() except it returns null instead of waiting for an
> > event if there is not one currently in the queue.
> -- 
> Jamey Sharp <jamey@sharp.ath.cx> - http://jamey.is.dreaming.org/
> 
> 
> _______________________________________________
> xcb mailing list
> xcb@nickle.org
> http://nickle.org/mailman/listinfo/xcb