server.c: Check return value of signal().
authorAndre Noll <maan@systemlinux.org>
Tue, 11 Dec 2007 16:37:16 +0000 (17:37 +0100)
committerAndre Noll <maan@systemlinux.org>
Tue, 11 Dec 2007 16:37:16 +0000 (17:37 +0100)
And replace the ugly code that counted the number of calls to
para_install_sighandler() by equivalent, but less ugly code.

server.c

index 93de8cc..17ff7cb 100644 (file)
--- a/server.c
+++ b/server.c
@@ -283,22 +283,26 @@ out:
 
 static void setup_signal_handling(void)
 {
-       int ret = 0;
-
-       signal_pipe = para_signal_init();
+       signal_pipe = para_signal_init(); /* always successful */
 
        PARA_NOTICE_LOG("setting up signal handlers\n");
-       ret += para_install_sighandler(SIGINT);
-       ret += para_install_sighandler(SIGTERM);
-       ret += para_install_sighandler(SIGHUP);
-       ret += para_install_sighandler(SIGCHLD);
-       signal(SIGPIPE, SIG_IGN);
-       signal(SIGUSR1, SIG_IGN);
-       if (ret != 4) {
-               PARA_EMERG_LOG("%s", "could not install signal handlers\n");
-               exit(EXIT_FAILURE);
-       }
+       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;
+       if (signal(SIGUSR1, SIG_IGN) == SIG_ERR)
+               goto err;
        add_close_on_fork_list(signal_pipe);
+       return;
+err:
+       PARA_EMERG_LOG("could not install signal handlers\n");
+       exit(EXIT_FAILURE);
 }
 
 static unsigned init_network(void)