--- 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; } }