$NetBSD: patch-al,v 1.4 2005/03/03 11:54:31 garbled Exp $ --- src/bw_pipe.c.orig 1997-06-26 17:34:33.000000000 -0700 +++ src/bw_pipe.c 2005-03-03 01:31:48.000000000 -0700 @@ -134,7 +134,7 @@ } /* Amount to transfer */ - todo = XFERUNIT * num_iter; + todo = XFERUNIT * num_iter + bufsize; /* Allocate buffer */ buf = (char *) malloc(bufsize); @@ -147,6 +147,8 @@ /* Spawn off a writer, then time the read */ switch (fork()) { case 0: /* writer */ + close(pipes[0]); + while ((done < todo) && ((n = write(pipes[1], buf, bufsize)) > 0)) done += n; @@ -159,8 +161,13 @@ /*NOTREACHED*/ default: /* reader */ + close(pipes[1]); + /* wait for writer */ - sleep(1); + while ((done < bufsize) && + ((n = read(pipes[0], buf, bufsize - done)) > 0)) + done += n; + start(); /* start timing */ while ((done < todo) && @@ -168,6 +175,7 @@ done += n; *t = stop(); /* stop timing */ + close(pipes[0]); wait(&termstat); /* wait for writer to exit */ }