[cairo] error handling questions
Behdad Esfahbod
behdad at behdad.org
Sun Jul 1 12:47:18 PDT 2007
On Mon, 2007-06-18 at 16:52 -0400, Vladimir Vukicevic wrote:
> We've been using CAIRO_STATUS_NO_MEMORY as "unknown error" in a bunch of
> places; I know that it's generally been the policy to use a real error
> code, but would anyone mind if I were to introduce
> CAIRO_STATUS_UNKNOWN_ERROR (or CAIRO_STATUS_FAILURE) so that we can
> distinguish between real OOM and unknown errors?
I'm in favor.
> Also, I'd like to add a bunch of #define's for the status messages that,
> for debug builds, do something like:
>
> static cairo_status_t
> _cairo_return_error(cairo_status_t status)
> {
> return status;
> }
>
> #define CAIRO_STATUS_NO_MEMORY (_cairo_return_error(CAIRO_STATUS_NO_MEMORY))
> etc.
>
> to make it possible to set a breakpoint at the spot where the error is
> returned. I'm not married to this approach, but right now it's hard to
> figure out where an error is getting signaled upstream, and this seemed
> like the easiest way to do it and avoid having to change a bunch of
> existing code ("return CAIRO_STATUS_FOO;").
Any place that an error is initiated should call _cairo_error(). it's
not like that for many error paths right now and those should be fixed.
We don't have a strict rule though, I'm sure there are cases that
_cairo_error should not be called (for UNSUPPORTED only?). Carl may
know how this is supposed to work, but I agree that our error handling
is still a bit messy. Maybe Chris can do some magic using his valgrind
skins? We probably need to go over all CAIRO_STATUS_* instance in the
code and double check it.
Also, feel free to make _cairo_error() do something if CAIRO_DEBUG env
var is set. Options are raising SIGTRAP and printing a backtrace. Back
to the old question: should we differentiate between debug and
production builds? I'd say no. Fontconfig respects FC_DEBUG in all
builds and it has been very handy. The only thing I don't like here is
that to produce useful backtraces we need to use Jeff's
backtrace_symbols().
> Thoughts?
> - Vlad
--
behdad
http://behdad.org/
"Those who would give up Essential Liberty to purchase a little
Temporary Safety, deserve neither Liberty nor Safety."
-- Benjamin Franklin, 1759
More information about the cairo
mailing list