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