Blame SPECS/ksh-20120801-crash.patch

Packit 992a25
diff -up ksh-20120801/src/cmd/ksh93/include/jobs.h.crash ksh-20120801/src/cmd/ksh93/include/jobs.h
Packit 992a25
--- ksh-20120801/src/cmd/ksh93/include/jobs.h.crash	2014-07-22 11:48:57.205062905 +0200
Packit 992a25
+++ ksh-20120801/src/cmd/ksh93/include/jobs.h	2014-07-22 11:48:57.243062711 +0200
Packit 992a25
@@ -118,6 +118,7 @@ struct jobs
Packit 992a25
 	char		jobcontrol;	/* turned on for real job control */
Packit 992a25
 	char		waitsafe;	/* wait will not block */
Packit 992a25
 	char		waitall;	/* wait for all jobs in pipe */
Packit 992a25
+	char		hack1_waitall;
Packit 992a25
 	char		toclear;	/* job table needs clearing */
Packit 992a25
 	unsigned char	*freejobs;	/* free jobs numbers */
Packit 992a25
 #if SHOPT_COSHELL
Packit 992a25
diff -up ksh-20120801/src/cmd/ksh93/sh/jobs.c.crash ksh-20120801/src/cmd/ksh93/sh/jobs.c
Packit 992a25
--- ksh-20120801/src/cmd/ksh93/sh/jobs.c.crash	2014-07-22 11:48:57.190062982 +0200
Packit 992a25
+++ ksh-20120801/src/cmd/ksh93/sh/jobs.c	2014-07-22 11:48:57.243062711 +0200
Packit 992a25
@@ -1957,6 +1957,7 @@ again:
Packit 992a25
 	{
Packit 992a25
 		count = bp->count;
Packit 992a25
 		jp = bp->list;
Packit 992a25
+		jpold = 0;
Packit 992a25
 		goto again;
Packit 992a25
 	}
Packit 992a25
 	if(jp)
Packit 992a25
diff -up ksh-20120801/src/cmd/ksh93/sh/subshell.c.crash ksh-20120801/src/cmd/ksh93/sh/subshell.c
Packit 992a25
--- ksh-20120801/src/cmd/ksh93/sh/subshell.c.crash	2014-07-22 11:48:57.234062758 +0200
Packit 992a25
+++ ksh-20120801/src/cmd/ksh93/sh/subshell.c	2014-07-22 11:54:04.164491483 +0200
Packit 992a25
@@ -492,6 +492,7 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_
Packit 992a25
 	struct sh_scoped savst;
Packit 992a25
 	struct dolnod   *argsav=0;
Packit 992a25
 	int argcnt;
Packit 992a25
+        int pipefail = 0;
Packit 992a25
 	memset((char*)sp, 0, sizeof(*sp));
Packit 992a25
 	sfsync(shp->outpool);
Packit 992a25
 	sh_sigcheck(shp);
Packit 992a25
@@ -541,7 +542,10 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_
Packit 992a25
 	sp->comsub = shp->comsub;
Packit 992a25
 	shp->subshare = comsub==2 ||  (comsub==1 && sh_isoption(SH_SUBSHARE));
Packit 992a25
 	if(comsub)
Packit 992a25
+	{
Packit 992a25
 		shp->comsub = comsub;
Packit 992a25
+		job.hack1_waitall=(comsub==1);
Packit 992a25
+	}
Packit 992a25
 	sp->shpwdfd=-1;
Packit 992a25
 	if(!comsub || !shp->subshare)
Packit 992a25
 	{
Packit 992a25
@@ -648,6 +652,7 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_
Packit 992a25
 		}
Packit 992a25
 		else
Packit 992a25
 		{
Packit 992a25
+			job.hack1_waitall=0;
Packit 992a25
 			if(comsub!=1 && shp->spid)
Packit 992a25
 			{
Packit 992a25
 				job_wait(shp->spid);
Packit 992a25
diff -up ksh-20120801/src/cmd/ksh93/sh/xec.c.crash ksh-20120801/src/cmd/ksh93/sh/xec.c
Packit 992a25
--- ksh-20120801/src/cmd/ksh93/sh/xec.c.crash	2014-07-22 11:48:57.228062787 +0200
Packit 992a25
+++ ksh-20120801/src/cmd/ksh93/sh/xec.c	2014-07-22 11:48:57.245062700 +0200
Packit 992a25
@@ -2125,7 +2125,7 @@ int sh_exec(register const Shnode_t *t,
Packit 992a25
 				memset(exitval,0,job.waitall*sizeof(int));
Packit 992a25
 			}
Packit 992a25
 			else
Packit 992a25
-				job.waitall |= !pipejob && sh_isstate(SH_MONITOR);
Packit 992a25
+				job.waitall |= job.hack1_waitall || !pipejob && sh_isstate(SH_MONITOR);
Packit 992a25
 			job_lock();
Packit 992a25
 			nlock++;
Packit 992a25
 			do