X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=signal.c;h=9b328caf6550da385eb64c824217da7f3abd4588;hb=9d90b35441a7a931775f37a3edd79a1b6af105f1;hp=5d6e6e45dcd8e728c1bfcc6e08899bf08d4fc512;hpb=9d8fdf8898418711558f70a9630b2444036d8285;p=paraslash.git diff --git a/signal.c b/signal.c index 5d6e6e45..9b328caf 100644 --- a/signal.c +++ b/signal.c @@ -1,8 +1,4 @@ -/* - * Copyright (C) 2004 Andre Noll - * - * Licensed under the GPL v2. For licencing details see COPYING. - */ +/* Copyright (C) 2004 Andre Noll , see file COPYING. */ /** \file signal.c Signal handling functions. */ #include @@ -25,7 +21,7 @@ static int signal_pipe[2]; * This function creates a pipe, the signal pipe, to deliver pending * signals to the application (Bernstein's trick). It should be called * during the application's startup part, followed by subsequent calls - * to para_install_sighandler() for each signal that should be caught. + * to \ref para_install_sighandler() for each signal that should be caught. * * A generic signal handler is used for all signals simultaneously. When a * signal arrives, the signal handler writes the number of the signal received @@ -33,7 +29,7 @@ static int signal_pipe[2]; * by checking if the file descriptor of the other end of the signal pipe is * ready for reading, see select(2). * - * \return This function either succeeds or calls exit(2) to terminate the + * \return This function either succeeds or calls exit(3) to terminate the * current process. On success, a signal task structure is returned. */ struct signal_task *signal_init_or_die(void) @@ -76,10 +72,13 @@ static void generic_signal_handler(int s) errno = save_errno; return; } - if (ret < 0) - PARA_EMERG_LOG("%s\n", strerror(errno)); - else - PARA_EMERG_LOG("short write to signal pipe\n"); + /* + * This is a fatal error which should never happen. We must not call + * PARA_XXX_LOG() here because this might acquire the log mutex which + * is already taken by the main program if the interrupt occurs while a + * log message is being printed. The mutex will not be released as long + * as this signal handler is running, so a deadlock ensues. + */ exit(EXIT_FAILURE); }