speck@cit-vax.ARPA (Don Speck) (03/12/85)
Shortly after I posted my concurrent version of dumptape.c, wallen@nprdc.arpa reported it bombing with a message " DUMP: pipe error in command to slave...". The concurrent dump was treating a short read on a pipe as an error, when it really isn't. The belated fix follows. It has been in use 2 weeks on our (lightly-loaded) VAX/780 with TU77, and as rdump on a 750. Since we weren't getting short reads anyway, my testing proves nothing; but I'm much too busy to try forcing the bug to manifest itself. A better test will be when we get our CDC 92185 in a few weeks. Don Speck P.S. We're looking for a competent, non-autocratic person to tend our 4.2bsd vaxen & Suns, a dozen now and more later... diff dist/dumptape.c dumptape.c 347a348,357 > readpipe(fd,buf,count) int fd, count; char *buf; { > int i, n; > for (n=0; n<count; buf+=i, n+=i) > if ((i=read(fd,buf,count-n)) <= 0) { > if (i==0 && n==0) return(0); /* Normal EOF */ > senderr(); > } > return(n); > } > 361c371 < while (read(cmd, req, reqsiz) == reqsiz) { --- > while (readpipe(cmd, req, reqsiz) > 0) { 370c380 < if (read(cmd,tblock[trecno],TP_BSIZE)!=TP_BSIZE) --- > if (readpipe(cmd,tblock[trecno],TP_BSIZE) <= 0)