[Xcb] XCB error handling; my penultimate proposal
jamey at minilop.net
Mon Dec 19 11:33:20 PST 2005
On Sun, Dec 18, 2005 at 09:12:10PM -0800, Barton C Massey wrote:
> Comments? Especially from someone other than the three of us?
Sorry, I can't help there. ;-)
> If we were to make the current API do (1), then applications that
> didn't check *Reply() for null on *every* request would lose, ...
They already lose: if you derefence the null reply pointer you get back
under error conditions, your app is going to segfault.
In message <1134963912.8789.4.camel at evo.keithp.com> Keith Packard wrote:
> While the uniform behaviour of always processing errors through the
> normal event loop is appealingly symmetrical, I'm afraid I haven't seen
> any substantive use cases where this is better than returning errors
> where the reply would have been, and there are plenty of examples where
> returning the error precisely where the reply would have been makes
> things far easier.
> We can obviously add Bart's APIs in a later release; I only suggest that
> we hold off until we find a compelling reason to extend the library in
> this fashion.
I like Bart's API (aside from the changes I suggested in my last mail)
at least for implementing Xlib/XCB, which probably ought to capture the
errors from all requests made through Xlib even if XCB owns the event
queue, and even for void requests. That way an Xlib-based library (like
Gtk+, for instance) can register an X error handler temporarily and have
it actually work, even when the rest of the app is ported to XCB.
Speaking of Gtk+, here's a use case for the ability to catch X errors
from void requests, which Bart's API does nicely. From gdkevents-x11.c,
XSelectInput (screen_x11->xdisplay, *xwindow, StructureNotifyMask);
if (gdk_error_trap_pop () == Success)
And another, from gdkimage-x11.c in _gdk_image_new_for_depth:
XShmAttach (screen_x11->xdisplay, x_shm_info);
XSync (screen_x11->xdisplay, False);
if (gdk_error_trap_pop ())
/* this is the common failure case so omit warning */
display_x11->use_xshm = FALSE;
And from gdkmain-x11.c in _gdk_send_xevent:
result = XSendEvent (GDK_DISPLAY_XDISPLAY (display), window,
propagate, event_mask, event_send);
XSync (GDK_DISPLAY_XDISPLAY (display), False);
return result && gdk_error_trap_pop() == Success;
(Which looks buggy, since it might not pop the error trap stack...)
I suspect if we really looked we'd find more.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Size: 189 bytes
Desc: Digital signature
Url : http://lists.freedesktop.org/archives/xcb/attachments/20051219/0939e886/attachment-0001.pgp
More information about the Xcb