SHA256
3
0
forked from pool/rpm
rpm/buildpipe.diff

38 lines
1.2 KiB
Diff

--- build/rpmfc.c.orig 2011-06-06 11:27:32.000000000 +0000
+++ build/rpmfc.c 2011-06-09 08:30:25.000000000 +0000
@@ -165,12 +165,14 @@ static int sigpipe_init(void)
fcntl(_sigpipe[1], F_SETFD, (fcntl(_sigpipe[1], F_GETFD)|FD_CLOEXEC));
/* XXX SIGPIPE too, but NSPR disables it already, dont mess with it */
signal(SIGCHLD, sigpipe_handler);
+ signal(SIGPIPE, SIG_IGN);
return _sigpipe[0];
}
static void sigpipe_finish(void)
{
signal(SIGCHLD, SIG_DFL);
+ signal(SIGPIPE, SIG_DFL);
close(_sigpipe[0]);
close(_sigpipe[1]);
_sigpipe[0] = -1;
@@ -290,6 +292,7 @@ static StringBuf getOutputFrom(ARGV_t ar
if (FD_ISSET(fromProg[0], &ibits)) {
int nbr = read(fromProg[0], buf, sizeof(buf)-1);
if (nbr < 0 && errno == EINTR) continue;
+ if (nbr == 0) break; /* EOF, we're done */
if (nbr < 0) {
myerrno = errno;
break;
@@ -298,10 +301,9 @@ static StringBuf getOutputFrom(ARGV_t ar
appendStringBuf(readBuff, buf);
}
- /* Child exited, we're done */
+ /* Child exited, we're maybe done */
if (FD_ISSET(sigpipe, &ibits)) {
while (read(sigpipe, buf, sizeof(buf)) > 0) {};
- break;
}
}