[PATCH weston 1/2] weston: remove SEGV and ABRT handlers

Peter Hutterer peter.hutterer at who-t.net
Wed Feb 7 23:31:12 UTC 2018


On Wed, Feb 07, 2018 at 12:03:56PM +0000, Simon McVittie wrote:
> On Wed, 07 Feb 2018 at 12:51:14 +0200, Pekka Paalanen wrote:
> > Catching an ABRT is kind of ok, catching a SEGV is russian roulette. We
> > have been quite lucky with it, but I've started hitting crashes inside
> > malloc() which causes a deadlock when our SEGV handler needs to malloc()
> > as well (weston_log_timestamp()).
> 
> This isn't unique to SIGSEGV: inside any POSIX async-signal handler,
> you can only (portably, safely) use functions that are documented to be
> async-signal-safe, which basically means syscall wrappers. See
> signal-safety(7) on a Linux system.

fun fact: printf() is not in that list of functions. so printf() from within
a signal handler may or may not go boom.

Cheers,
   Peter

> 
> (If anything in the Wayland/Weston stack reloads configuration on SIGHUP,
> it should probably use the standard "pipe-to-self trick", like e.g.
> dbus-daemon does - write a byte to a pipe using async-signal-safe write(),
> poll that pipe in the main loop, and reload configuration from the main
> loop whenever one or more bytes can be read from the pipe. That's a
> safe pattern.)
> 
> > Therefore, this code does more harm than it is useful, so remove it. We
> > also drop an optional dependency to libunwind.
> 
> I am not a Wayland reviewer, but I think this is an excellent idea. The
> best signal handlers are SIG_DFL and SIG_IGN :-)
> 
>     smcv
> 


More information about the wayland-devel mailing list