On Tue, 2009-02-10 at 14:53 +1300, Michael Kerrisk wrote: > static void > handler(int sig, siginfo_t *si, void *uc) > { > /* Note: calling printf() from a signal handler is not > strictly correct, since printf() is not async-signal-safe; > see signal(7) */ > > printf("Caught signal %d\n", sig); > print_siginfo(si); > signal(SIG, SIG_IGN); > } Is that actually safe to do? I can remember getting into deadlocks by doing this some few years ago. The problem was that glibc uses a mutex to guard its memory area for the malloc memory pool, and signals can come in while the main thread of execution is within that mutex, if at that point the signal handler also tries to use anything using malloc (here, I was thinking printf() might), you've got a deadlock. One thing I always enjoyed about the QNX man-pages was that it explicitly states which functions are and are _NOT_ signal safe, iow which functions can be reliably used from signal handler context. -- To unsubscribe from this list: send the line "unsubscribe linux-man" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html