]> git.tuebingen.mpg.de Git - paraslash.git/commitdiff
Kill remaining instances of signal().
authorAndre Noll <maan@systemlinux.org>
Mon, 6 Apr 2009 17:02:16 +0000 (19:02 +0200)
committerAndre Noll <maan@systemlinux.org>
Mon, 6 Apr 2009 17:02:16 +0000 (19:02 +0200)
Also, make para_sigaction() and para_install_sighandler() return void
and exit on errors.

afs.c
audiod.c
command.c
error.h
gui.c
server.c
signal.c
signal.h

diff --git a/afs.c b/afs.c
index f4a44bbbe0af852a61d81488bfe2274e0879a52d..2ebc0089cdeb15dda9dbd7bd0e0cc7d592c7d824 100644 (file)
--- a/afs.c
+++ b/afs.c
@@ -805,10 +805,7 @@ static void register_signal_task(void)
 {
        struct signal_task *st = &signal_task_struct;
 
-       if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) {
-               PARA_EMERG_LOG("failed to ignore SIGPIPE\n");
-               exit(EXIT_FAILURE);
-       }
+       para_sigaction(SIGPIPE, SIG_IGN);
        st->fd = para_signal_init();
        PARA_INFO_LOG("signal pipe: fd %d\n", st->fd);
        para_install_sighandler(SIGINT);
index 3a2607defc2576b476628524102b5d8367985b89..6d7cce5efdf109f251dfa112fb5ed6593d2c0d02 100644 (file)
--- a/audiod.c
+++ b/audiod.c
@@ -286,7 +286,7 @@ static void setup_signal_handling(void)
        para_install_sighandler(SIGINT);
        para_install_sighandler(SIGTERM);
        para_install_sighandler(SIGHUP);
-       signal(SIGPIPE, SIG_IGN);
+       para_sigaction(SIGPIPE, SIG_IGN);
 }
 
 static void clear_slot(int slot_num)
index ca08ed729a9f6d65ae34ccacfc931e5bdea6dec8..229ec5c6fcbdfcc6c015ef41e082db2ff3a90f23 100644 (file)
--- a/command.c
+++ b/command.c
@@ -313,9 +313,7 @@ int com_stat(int fd, int argc, char * const * argv)
        struct misc_meta_data tmp, *nmmd = &tmp;
        char *s;
 
-       ret = para_sigaction(SIGUSR1, dummy);
-       if (ret < 0)
-               return ret;
+       para_sigaction(SIGUSR1, dummy);
 
        if (argc > 1)
                num = atoi(argv[1]);
@@ -652,22 +650,12 @@ out:
 
 }
 
-static int reset_signals(void)
+static void reset_signals(void)
 {
-       int ret = para_sigaction(SIGCHLD, SIG_IGN);
-
-       if (ret < 0)
-               return ret;
-       ret = para_sigaction(SIGINT, SIG_DFL);
-       if (ret < 0)
-               return ret;
-       ret = para_sigaction(SIGTERM, SIG_DFL);
-       if (ret < 0)
-               return ret;
-       ret = para_sigaction(SIGHUP, SIG_DFL);
-       if (ret < 0)
-               return ret;
-       return 1;
+       para_sigaction(SIGCHLD, SIG_IGN);
+       para_sigaction(SIGINT, SIG_DFL);
+       para_sigaction(SIGTERM, SIG_DFL);
+       para_sigaction(SIGHUP, SIG_DFL);
 }
 
 /**
@@ -709,9 +697,7 @@ __noreturn void handle_connect(int fd, const char *peername)
        char *p, *command = NULL;
        size_t numbytes;
 
-       ret = reset_signals();
-       if (ret < 0)
-               goto err_out;
+       reset_signals();
        /* we need a blocking fd here as recv() might return EAGAIN otherwise. */
        ret = mark_fd_blocking(fd);
        if (ret < 0)
diff --git a/error.h b/error.h
index 94a412020119947db3fa3ec77aae293438ec4208..81910e2d08f4cf8515c9fea2a87141da0e8eae4f 100644 (file)
--- a/error.h
+++ b/error.h
@@ -29,6 +29,8 @@ DEFINE_ERRLIST_OBJECT_ENUM;
 #define HTTP_SEND_ERRORS
 #define GGO_ERRORS
 #define COLOR_ERRORS
+#define SIGNAL_ERRORS
+
 
 extern const char **para_errlist[];
 
@@ -299,10 +301,6 @@ extern const char **para_errlist[];
        PARA_ERROR(FILTER_SYNTAX, "syntax error"), \
 
 
-#define SIGNAL_ERRORS \
-       PARA_ERROR(SIGNAL_SIG_ERR, "signal() returned SIG_ERR"), \
-
-
 #define STRING_ERRORS \
        PARA_ERROR(ATOI_OVERFLOW, "value too large"), \
        PARA_ERROR(STRTOLL, "unknown strtoll error"), \
diff --git a/gui.c b/gui.c
index 15422b96bc94a5c82fd29e93a11df7c4317c2e1c..fc2cd9a145d25ac5ff0197fa132a87f5492661f7 100644 (file)
--- a/gui.c
+++ b/gui.c
@@ -521,13 +521,12 @@ static void setup_signal_handling(void)
        para_install_sighandler(SIGCHLD);
        para_install_sighandler(SIGWINCH);
        para_install_sighandler(SIGUSR1);
-//     signal(SIGPIPE, SIG_IGN);
-       signal(SIGHUP, SIG_IGN);
+       para_sigaction(SIGHUP, SIG_IGN);
 }
 
 __noreturn static void do_exit(int ret)
 {
-       signal(SIGTERM, SIG_IGN);
+       para_sigaction(SIGTERM, SIG_IGN);
        kill(0, SIGTERM);
        exit(ret);
 }
index c5c97612e7bc353c7ea18d49a17c6adafdadcca7..79e67818c87a1573b312c00091c8199f41c286ed 100644 (file)
--- a/server.c
+++ b/server.c
@@ -318,25 +318,15 @@ static void init_signal_task(void)
        st->task.post_select = signal_post_select;
        sprintf(st->task.status, "signal task");
 
+       PARA_NOTICE_LOG("setting up signal handling\n");
        st->fd = para_signal_init(); /* always successful */
-
-       PARA_NOTICE_LOG("setting up signal handlers\n");
-       if (para_install_sighandler(SIGINT) < 0)
-               goto err;
-       if (para_install_sighandler(SIGTERM) < 0)
-               goto err;
-       if (para_install_sighandler(SIGHUP) < 0)
-               goto err;
-       if (para_install_sighandler(SIGCHLD) < 0)
-               goto err;
-       if (signal(SIGPIPE, SIG_IGN) == SIG_ERR)
-               goto err;
+       para_install_sighandler(SIGINT);
+       para_install_sighandler(SIGTERM);
+       para_install_sighandler(SIGHUP);
+       para_install_sighandler(SIGCHLD);
+       para_sigaction(SIGPIPE, SIG_IGN);
        add_close_on_fork_list(st->fd);
        register_task(&st->task);
-       return;
-err:
-       PARA_EMERG_LOG("could not install signal handlers\n");
-       exit(EXIT_FAILURE);
 }
 
 static void command_pre_select(struct sched *s, struct task *t)
@@ -485,7 +475,7 @@ static void server_init(int argc, char **argv)
                .check_ambiguity = 0,
                .print_errors = 1
        };
-       int ret, afs_socket;
+       int afs_socket;
 
        valid_fd_012();
        init_random_seed();
@@ -514,20 +504,13 @@ static void server_init(int argc, char **argv)
         * before the child gets a chance to ignore this signal -- only the
         * good die young.
         */
-       if (signal(SIGUSR1, SIG_IGN) == SIG_ERR) {
-               PARA_EMERG_LOG("failed to ignore SIGUSR1\n");
-               exit(EXIT_FAILURE);
-       }
+       para_sigaction(SIGUSR1, SIG_IGN);
        /*
         * We have to install a SIGCHLD handler before the afs process is being
         * forked off. Otherwise, para_server does not notice if afs dies before
         * the SIGCHLD handler has been installed by init_signal_task() below.
         */
-       ret = para_sigaction(SIGCHLD, tmp_sigchld_handler);
-       if (ret < 0) {
-               PARA_EMERG_LOG("SIGCHLD: %s\n", para_strerror(-ret));
-               exit(EXIT_FAILURE);
-       }
+       para_sigaction(SIGCHLD, tmp_sigchld_handler);
        PARA_NOTICE_LOG("initializing the audio file selector\n");
        afs_socket = init_afs();
        init_signal_task();
index 84f73fc8a9e373e7abdf6a6d7043f3c1be5e07b3..59a0d45aba7ad975fc287862308891435c4e9095 100644 (file)
--- a/signal.c
+++ b/signal.c
@@ -122,12 +122,11 @@ void para_reap_children(void)
  * \param sig The number of the signal to catch.
  * \param handler to be installed, \p SIG_IGN, or \p SIG_DFL.
  *
- * \return This function returns 1 on success and \p -E_SIGNAL_SIG_ERR on
- * errors.
+ * This either succeeds or calls exit(EXIT_FAILURE).
  *
  * \sa sigaction(2).
  */
-int para_sigaction(int sig, void (*handler)(int))
+void para_sigaction(int sig, void (*handler)(int))
 {
        struct sigaction act;
 
@@ -144,9 +143,11 @@ int para_sigaction(int sig, void (*handler)(int))
                        act.sa_flags |= SA_RESTART;
                #endif
        }
-       if (sigaction(sig, &act, NULL) < 0)
-               return -E_SIGNAL_SIG_ERR;
-       return 1;
+       if (sigaction(sig, &act, NULL) >= 0)
+               return;
+       PARA_EMERG_LOG("failed to install signal handler for signal %d\n",
+               sig);
+       exit(EXIT_FAILURE);
 }
 
 /**
@@ -154,14 +155,11 @@ int para_sigaction(int sig, void (*handler)(int))
  *
  * \param sig The number of the signal to catch.
  *
- * \return This function returns 1 on success and \p -E_SIGNAL_SIG_ERR on
- * errors.
- *
  * \sa signal(2), sigaction(2).
  */
-int para_install_sighandler(int sig)
+void para_install_sighandler(int sig)
 {
-       return para_sigaction(sig, &generic_signal_handler);
+       para_sigaction(sig, &generic_signal_handler);
 }
 
 /**
index 610c4d89f702d596e36cc004e2e5d56579753381..685654d5aae87f64e8d02823521984d1291133f7 100644 (file)
--- a/signal.h
+++ b/signal.h
@@ -19,8 +19,8 @@ struct signal_task {
 };
 
 int para_signal_init(void);
-int para_sigaction(int sig, void (*handler)(int));
-int para_install_sighandler(int);
+void para_sigaction(int sig, void (*handler)(int));
+void para_install_sighandler(int);
 void para_reap_children(void);
 int para_reap_child(pid_t *pid);
 int para_next_signal(void);