diff --git a/src/signal_handler.c b/src/signal_handler.c index f552f71d17583b4ff6625dec6c584661d8ac694d..59fffddf13dd24de29a03780bcae0fa046c7208a 100644 --- a/src/signal_handler.c +++ b/src/signal_handler.c @@ -23,7 +23,7 @@ #include "builtin_functions.h" #include <signal.h> -RCSID("$Id: signal_handler.c,v 1.117 1999/03/11 03:14:34 hubbe Exp $"); +RCSID("$Id: signal_handler.c,v 1.118 1999/03/13 21:04:05 grubba Exp $"); #ifdef HAVE_PASSWD_H # include <passwd.h> @@ -1206,6 +1206,7 @@ extern int pike_make_pipe(int *); ; \ if (_l < 0) break; \ } \ + close(control_pipe[1]); \ exit(99); \ } while(0) @@ -2143,8 +2144,13 @@ void f_create_process(INT32 args) buf[0] = 0; while (((e = write(control_pipe[0], buf, 1)) < 0) && (errno == EINTR)) ; - if(e!=1) - error("Child process died prematurely. (e=%d errno=%d)\n",e,errno); + if(e!=1) { + /* Paranoia in case close() sets errno. */ + int olderrno = errno; + close(control_pipe[0]); + error("Child process died prematurely. (e=%d errno=%d)\n", + e ,olderrno); + } /* Wait for exec or error */ while (((e = read(control_pipe[0], buf, 3)) < 0) && (errno == EINTR))