[PATCH v3 00/16] Fix signal-unsafe logging
Peter Hutterer
peter.hutterer at who-t.net
Thu May 10 23:27:29 PDT 2012
On Mon, Apr 16, 2012 at 11:14:17AM -0700, Chase Douglas wrote:
> This new patchset has some large improvements:
>
> * Variadic logging. This is done using preprocessor magic, so it is
> incompatible with the current variadic logging. It is also not type-
> safe (it could be with C11 _Generic, but only clang supports it so
> far). It also only supports up to 10 arguments. If you pass more, bad
> things might happen, but we can always increase the size as needed.
> Due to these issues and formatting limitations, I don't think we
> should switch all our logging to be signal-safe. We just have to be
> more careful with signal-safe logging.
>
> The logging is now *printf-like. However, it only supports %s, %u, %x,
> and %p (because it was trivial). I haven't see any need for %d, so I
> didn't add it. No modifiers of any sort are supported, %u and %x are
> extended to 64-bit values.
>
> The macro magic requires an ugly GCC pragma hack to turn off a
> specific warning for when casting a pointer return value of a function
> to a non-pointer value. I can't come up with a casting mechanism that
> GCC likes for all scenarios, and we are admittedly doing horrible,
> awful casting that normally would be verboten.
>
> * Added ErrorSigSafe() macro and converted all the ErrorF signal logging
> to it.
>
> * Made BUG_WARN* signal safe.
>
> * Use BUG_WARN_MSG() when logging unsafely in signal context. This logs
> the full backtrace so it is even easier to find the offending message.
>
> Unfortunately, I don't have time right now to get to unit testing. I
> must drop this work in order to get back to some Ubuntu release stuff.
series: Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net> except the
backtrace issues pointed out in the various patches.
that cpp macro stuff makes me a bit nervous though I did do a paper-check of
it.
Cheers,
Peter
More information about the xorg-devel
mailing list