diff options
author | David E. O'Brien <obrien@FreeBSD.org> | 1998-03-15 20:43:16 +0000 |
---|---|---|
committer | David E. O'Brien <obrien@FreeBSD.org> | 1998-03-15 20:43:16 +0000 |
commit | 9f76c1d34bed975913cdeba37b030e7d03a558e4 (patch) | |
tree | 1419eda26251677b58e849455ca28fb0bfcd7d04 /misc/team | |
parent | Activate xnibbles. (diff) |
Merge all the patches together so there is one patch / souce file.
(there were more patch files than souce files here :) )
Now merged are the fixes:
ports/1966: Team doesn't support...
ports/2204: Team can hang when stderr is a file
I've seen team hang when stderr is a file. 'top' reports that it is
stuck in lockf.
ports/2203: Team's exit status doesn't indicate if there ...
Team's exit status will be 0 even if there is an I/O error. The reason
is that the exit status of the "guys" isn't checked.
Submitted by: dawes@physics.usyd.edu.au (David Dawes)
Notes
Notes:
svn path=/head/; revision=10162
Diffstat (limited to 'misc/team')
-rw-r--r-- | misc/team/files/patch-a | 7 | ||||
-rw-r--r-- | misc/team/files/patch-b | 356 |
2 files changed, 352 insertions, 11 deletions
diff --git a/misc/team/files/patch-a b/misc/team/files/patch-a index 2a8bd311e970..af58ef65d7f4 100644 --- a/misc/team/files/patch-a +++ b/misc/team/files/patch-a @@ -1,6 +1,5 @@ -diff -u team-3.1/Makefile ./Makefile ---- team-3.1/Makefile Sat Jul 1 17:33:24 1995 -+++ ./Makefile Sat Jul 1 17:53:20 1995 +--- Makefile.dist Sat Jul 1 08:33:24 1995 ++++ Makefile Sun Mar 15 12:37:16 1998 @@ -1,25 +1,8 @@ -CFLAGS =-O -LDFLAGS =-s @@ -12,7 +11,7 @@ diff -u team-3.1/Makefile ./Makefile +MANDIR= ${PREFIX}/man/man -DEST= -+CFLAGS+= -DHAVE_PARAM_H ++CFLAGS+= -DHAVE_PARAM_H -DHAVE_WAIT_H -MI =$(DEST)/usr/ -MD =$(DEST)/usr/ diff --git a/misc/team/files/patch-b b/misc/team/files/patch-b index 293325e09a3c..f8a3d3454a1e 100644 --- a/misc/team/files/patch-b +++ b/misc/team/files/patch-b @@ -1,19 +1,83 @@ -diff -u team-3.1/team.c ./team.c ---- team-3.1/team.c Sat Jul 1 17:33:24 1995 -+++ ./team.c Sat Jul 1 17:54:05 1995 -@@ -85,6 +85,11 @@ +--- team.c.dist Sat Jul 1 08:33:24 1995 ++++ team.c Sun Mar 15 12:37:16 1998 +@@ -58,8 +58,8 @@ + upstream to it, which has much the same effect. + */ + +-#define TeamLVOLSZ (1L<<10) +-#define TeamHVOLSZ ((long unsigned) 3 * ((long unsigned) 1 << 30)) ++#define TeamLVOLSZ (off_t unsigned)(1L<<10) ++#define TeamHVOLSZ ((off_t unsigned) 3 * ((off_t unsigned) 1 << 62)) + + #define TeamLBUFSZ (64) /* Low buffer size */ + #define TeamDBUFSZ (60*512) /* Default buffer size */ +@@ -84,11 +84,23 @@ + #include <sys/file.h> #include <sys/stat.h> #include <fcntl.h> - ++#ifdef HAVE_WAIT_H ++#include <sys/wait.h> ++#endif ++ +#ifdef HAVE_PARAM_H +#include <sys/param.h> +#endif + -+ + #ifdef sun # undef F_SETLKW #endif -@@ -286,7 +291,12 @@ + ++#ifdef __FreeBSD__ ++# undef F_SETLKW ++#endif ++ + #if (PCG) + # include "Extend.h" + # include "Here.h" +@@ -160,6 +172,7 @@ + + local bool verbose = false; + local bool report = true; ++local bool guyhaderror = false; + + extern int errno; + local time_t origin; +@@ -190,7 +203,7 @@ + { + int fd; + short status; +- long unsigned size; ++ off_t unsigned size; + }; + + local Fd FdIn,FdOut; +@@ -199,7 +212,7 @@ + ( + fast Fd *fd + _ int ffd +-_ long unsigned size ++_ off_t unsigned size + ) + { + fd->status = (ffd >= 0) ? FdOPEN : FdCLOSED; +@@ -252,12 +265,12 @@ + to->fd = from->fd; + } + +-local long unsigned FdRetry on((fd,which,done,space)) is ++local off_t unsigned FdRetry on((fd,which,done,space)) is + ( + fast Fd *fd + _ char *which +-_ long unsigned done +-_ long unsigned space ++_ off_t unsigned done ++_ off_t unsigned space + ) + { + int tty; +@@ -286,16 +299,21 @@ do { #if (defined i386 || defined sun) @@ -26,3 +90,281 @@ diff -u team-3.1/team.c ./team.c char *errmsg = sys_errlist[errno]; #else char errmsg[32]; + (void) sprintf(errmsg,"Error %d",errno); + #endif + if (errno) +- mesg("'%s' on %s after %luk. Continue [cyn] ? ",errmsg,which,done>>10); ++ mesg("'%s' on %s after %quk. Continue [cyn] ? ",errmsg,which,done>>10); + else +- mesg("EOF on %s after %luk. Continue [cyn] ? ",which,done>>10); ++ mesg("EOF on %s after %quk. Continue [cyn] ? ",which,done>>10); + + read(tty,reply,sizeof reply); + } +@@ -320,7 +338,7 @@ + local unsigned FdCanDo on((remaining,available)) is + ( + fast address remaining +-_ fast long unsigned available ++_ fast off_t unsigned available + ) + { + return (remaining < available) +@@ -332,10 +350,10 @@ + fast Fd *fd + _ pointer buffer + _ fast address todo +-_ long unsigned done ++_ off_t unsigned done + ) + { +- fast long unsigned space; ++ fast off_t unsigned space; + fast int bytesRead; + fast address justDone; + +@@ -373,10 +391,10 @@ + fast Fd *fd + _ pointer buffer + _ fast address todo +-_ long unsigned done ++_ off_t unsigned done + ) + { +- fast long unsigned space; ++ fast off_t unsigned space; + fast int bytesWritten; + fast address justDone; + +@@ -453,7 +471,7 @@ + { + Token token; + short status; +- long unsigned done; ++ off_t unsigned done; + }; + + local bool StreamSend on((fd,token,status,done)) is +@@ -461,7 +479,7 @@ + fast Fd *fd + _ Token token + _ short status +-_ long unsigned done ++_ off_t unsigned done + ) + { + fast int n; +@@ -483,7 +501,7 @@ + fast Fd *fd + _ Token *tokenp + _ short *statusp +-_ long unsigned *donep ++_ off_t unsigned *donep + ) + { + fast int n; +@@ -536,7 +554,7 @@ + #define GuyRECEIVE(guy,tokenp,statusp,donep) \ + StreamReceive(&guy->upStream,tokenp,statusp,donep) + +-local bool GuyStop of((Guy *,char *,long unsigned)); ++local bool GuyStop of((Guy *,char *,off_t unsigned)); + + local bool GuyStart on((guy,bufsize)) is + ( +@@ -547,7 +565,7 @@ + fast char *buffer; + Token token; + short status; +- long unsigned done; ++ off_t unsigned done; + bool received; + static int bytesRead,bytesWritten; + +@@ -577,7 +595,7 @@ + done += bytesRead; + + if (verbose) +- mesg("%luk read \r",done>>10); ++ mesg("%quk read \r",done>>10); + + if (!GuySEND(guy,TokenREAD,FdIn.status,done)) + GuyStop(guy,"guy cannot send READ",done); +@@ -595,7 +613,7 @@ + done += bytesWritten; + + if (verbose) +- mesg("%luk written\r",done>>10); ++ mesg("%quk written\r",done>>10); + + if (!GuySEND(guy,TokenWRITE,FdOut.status,done)) + GuyStop(guy,"guy cannot send WRITE",done); +@@ -619,7 +637,7 @@ + ( + fast Guy *guy + _ char *errormsg +-_ long unsigned done ++_ off_t unsigned done + ) + { + Mesg(("GuyStop guy %#o\n",guy)); +@@ -627,8 +645,8 @@ + if (done) + { + if (report) +- mesg("%lu kilobytes, %lu seconds\r\n", +- done>>10,(long unsigned) (time((time_t *) 0)-origin)); ++ mesg("%qu kilobytes, %lu seconds\r\n", ++ done>>10,(off_t unsigned) (time((time_t *) 0)-origin)); + else if (verbose) + mesg("\n"); + } +@@ -637,7 +655,7 @@ + { + mesg("team: guy pid %u: %s\n",guy->pid,errormsg); + call GuySEND(guy,TokenABORT,FdERROR,0L); +- exit(1); ++ exit(2); + /*NOTREACHED*/ + } + +@@ -697,8 +715,8 @@ + ( + fast Team *team + _ address bufsize +-_ long unsigned isize +-_ long unsigned osize ++_ off_t unsigned isize ++_ off_t unsigned osize + ) + { + /* +@@ -797,6 +815,9 @@ + { + pid = getpid(); + ++ /* Set SIGPIPE handling back to the default in the guys */ ++ signal(SIGPIPE, SIG_DFL); ++ + if (!FdClose(&last_downstream)) + perror("cannot close inherited first link"); + +@@ -816,13 +837,13 @@ + } + } + +- if (!StreamSend(&last_downstream,TokenREAD,FdOPEN,0L)) ++ if (!StreamSend(&last_downstream,TokenREAD,FdOPEN,0L) && errno != EPIPE) + { + perror("cannot send first READ token"); + return false; + } + +- if (!StreamSend(&last_downstream,TokenWRITE,FdOPEN,0L)) ++ if (!StreamSend(&last_downstream,TokenWRITE,FdOPEN,0L) && errno != EPIPE) + { + perror("cannot send first WRITE token"); + return false; +@@ -864,6 +885,14 @@ + + --team->active; + ++#ifdef WIFEXITED ++ /* If a guy had an error, its exit status is 2. Also catch a killed guy */ ++ if ((WIFEXITED(status) && WEXITSTATUS(status) == 2) || ++ (WIFSIGNALED(status) && WTERMSIG(status) != SIGPIPE)) { ++ guyhaderror = true; ++ } ++#endif ++ + if (status != 0 && team->active != 0) + return false; + } +@@ -914,8 +943,8 @@ + syntax: team [-[vr]] [-iI[bkm] [-oO[bkm] [N[bkm] [P]]\n\ + copies standard input to output\n\ + -v gives ongoing report, -r final report\n\ +- I is input volume size (default %lum)\n\ +- O is output volume size (default %lum)\n\ ++ I is input volume size (default %qum)\n\ ++ O is output volume size (default %qum)\n\ + N is buffer size (default %luk)\n\ + P is number of processes (default %u)\n\ + (postfix b means *512, k means *1KB, m means *1MB)\n\ +@@ -927,19 +956,19 @@ + /*NOTREACHED*/ + } + +-local long unsigned atos on((s)) is ++local off_t unsigned atos on((s)) is + ( + fast char *s + ) + { +- fast unsigned long l; ++ fast off_t unsigned l; + + for ( + s, l = 0L; + *s >= '0' && *s <= '9'; + s++ + ) +- l = l*10L + (long unsigned) (*s-'0'); ++ l = l*10L + (off_t unsigned) (*s-'0'); + + if (*s == 'b') l *= (1L<<9); + if (*s == 'k') l *= (1L<<10); +@@ -958,8 +987,8 @@ + short unsigned teamsize; + + address bufsize; +- long unsigned isize; +- long unsigned osize; ++ off_t unsigned isize; ++ off_t unsigned osize; + int opt; + + teamsize = TeamDTEAMSZ; +@@ -975,7 +1004,7 @@ + isize = atos(optarg); + if (isize < TeamLVOLSZ || isize > TeamHVOLSZ) + { +- fprintf(stderr,"team: invalid input volume size %lu\n",isize); ++ fprintf(stderr,"team: invalid input volume size %qu\n",isize); + usage(); + } + +@@ -983,7 +1012,7 @@ + osize = atos(optarg); + if (osize < TeamLVOLSZ || osize > TeamHVOLSZ) + { +- fprintf(stderr,"team: invalid output volume size %lu\n",osize); ++ fprintf(stderr,"team: invalid output volume size %qu\n",osize); + usage(); + } + +@@ -1032,6 +1061,11 @@ + + origin = time((time_t *) 0); + ++ /* ++ * Ignore SIGPIPE in the parent as it affects the exit status reporting. ++ */ ++ signal(SIGPIPE, SIG_IGN); ++ + if (!TeamStart(&team,bufsize,isize,osize)) + { + mesg("team: cannot start the team\n"); +@@ -1052,6 +1086,12 @@ + if (!TeamClose(&team)) + { + mesg("team: cannot close the team\n"); ++ return 1; ++ } ++ ++ if (guyhaderror) ++ { ++ mesg("team: guy had error\n"); + return 1; + } + |