X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=signal.c;h=f9b95f9006dee9c9cd558bb39bc0cc6c90ca1bb1;hp=5f121063c10591731a253fb1f227dd1bb0f29da5;hb=96bdf2d7b6206bb042031f2b13075a56bb8921a3;hpb=a50db8f0f9fd46211f0dccae287c9f016ae48019 diff --git a/signal.c b/signal.c index 5f121063..f9b95f90 100644 --- a/signal.c +++ b/signal.c @@ -17,7 +17,13 @@ */ /** \file signal.c signal handling functions */ + + #include "para.h" +#include "fd.h" + +#include + #include "error.h" static int signal_pipe[2]; @@ -41,19 +47,18 @@ static int signal_pipe[2]; */ int para_signal_init(void) { - int i; + int ret = -E_SIGNAL_PIPE; if (pipe(signal_pipe)) goto err_out; - for (i = 0; i < 2; i++) { - int fd = signal_pipe[i], flags = fcntl(fd, F_GETFL); - if (flags < 0) - goto err_out; - if (fcntl(fd, F_SETFL, ((long)flags) | O_NONBLOCK) < 0) - goto err_out; - } + ret = mark_fd_nonblock(signal_pipe[0]); + if (ret < 0) + goto err_out; + ret = mark_fd_nonblock(signal_pipe[1]); + if (ret < 0) + goto err_out; return signal_pipe[0]; err_out: - PARA_EMERG_LOG("%s", "pipe error: Can not setup signal pipe"); + PARA_EMERG_LOG("%s\n", PARA_STRERROR(-ret)); exit(EXIT_FAILURE); } @@ -84,7 +89,7 @@ pid_t para_reap_child(void) if (pid <= 0) { if (pid < 0) pid = -E_WAITPID; - return 0; + return pid; } if (WIFEXITED(status)) PARA_DEBUG_LOG("child %i exited. Exit status: %i\n", pid,