summaryrefslogtreecommitdiff
path: root/misc/team
diff options
context:
space:
mode:
authorDavid E. O'Brien <obrien@FreeBSD.org>1998-03-15 20:43:16 +0000
committerDavid E. O'Brien <obrien@FreeBSD.org>1998-03-15 20:43:16 +0000
commit9f76c1d34bed975913cdeba37b030e7d03a558e4 (patch)
tree1419eda26251677b58e849455ca28fb0bfcd7d04 /misc/team
parentActivate 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-a7
-rw-r--r--misc/team/files/patch-b356
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;
+ }
+