diff options
Diffstat (limited to 'src/process/posix_spawn.c')
-rw-r--r-- | src/process/posix_spawn.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/process/posix_spawn.c b/src/process/posix_spawn.c index 728551b3..8294598b 100644 --- a/src/process/posix_spawn.c +++ b/src/process/posix_spawn.c @@ -4,6 +4,7 @@ #include <unistd.h> #include <signal.h> #include <fcntl.h> +#include <errno.h> #include <sys/wait.h> #include "syscall.h" #include "lock.h" @@ -156,7 +157,11 @@ static int child(void *args_vp) fail: /* Since sizeof errno < PIPE_BUF, the write is atomic. */ ret = -ret; - if (ret) while (__syscall(SYS_write, p, &ret, sizeof ret) < 0); + if (ret) { + int r; + do r = __syscall(SYS_write, p, &ret, sizeof ret); + while (r<0 && r!=-EPIPE); + } _exit(127); } |