Handling X errors using exception handlers
Lionel Ulmer
lionel.ulmer at free.fr
Sun Jul 15 12:54:42 CDT 2001
> The main problem with that is that I don't think you can jump out of
> Xlib without corrupting its state. Also you'd need to properly unlock
> the tsx11 lock in case of exception, which will probably require an
> finally handler around each X call.
Well, seems you are right about X not liking the 'longjmp' stuff (I asked on
the XPert mailing list to confirm :-) ).
> My idea was to have the following two functions:
>
> void X11DRV_expect_error( unsigned char request, unsigned char error, XID id );
> int X11DRV_check_error(void);
>
> You'd call X11DRV_expect_error before doing an X call that can fail;
> then if an X error happens that matches what you expect, the X error
> handler will simply set a flag and ignore the error (if it doesn't
> match you get the standard error handling). Then after the call you
> use X11DRV_check_error to see if your error happened or not. Would
> this work for what you need?
Yeah, this would work (and is about what I already did in the XShm and WGL
code to detect X errors, except that I just set a global variable in case of
error :-) ).
The only problems I could see with this approach is that :
- it cannot 'expect' more than one kind of error at the same time
- I am not sure that the parameters thing are really a good idea. Are we
sure that the error code are the same on all X servers ? Are they
standardized ?
Lionel
--
Lionel Ulmer - http://www.bbrox.org/
More information about the wine-devel
mailing list