41 lines
1.1 KiB
Plaintext
41 lines
1.1 KiB
Plaintext
|
--- ./src/cmd/ksh93/sh/jobs.c.orig 2016-07-26 12:52:44.178281624 +0000
|
||
|
+++ ./src/cmd/ksh93/sh/jobs.c 2016-07-26 12:52:59.563281597 +0000
|
||
|
@@ -2071,6 +2071,10 @@ void job_fork(pid_t parent)
|
||
|
job_lock();
|
||
|
jobfork++;
|
||
|
break;
|
||
|
+ case -2:
|
||
|
+ jobfork--;
|
||
|
+ job_unlock();
|
||
|
+ break;
|
||
|
case 0:
|
||
|
jobfork=0;
|
||
|
job_unlock();
|
||
|
--- ./src/cmd/ksh93/sh/xec.c.orig 2016-07-26 12:52:37.322281636 +0000
|
||
|
+++ ./src/cmd/ksh93/sh/xec.c 2016-07-26 12:55:37.097281318 +0000
|
||
|
@@ -3952,6 +3952,7 @@ static pid_t sh_ntfork(Shell_t *shp,cons
|
||
|
# endif /* !_lib_fork */
|
||
|
sh_pushcontext(shp,buffp,SH_JMPCMD);
|
||
|
errorpush(&buffp->err,ERROR_SILENT);
|
||
|
+ job_lock(); /* errormsg will unlock */
|
||
|
jmpval = sigsetjmp(buffp->buff,0);
|
||
|
if(jmpval == 0)
|
||
|
{
|
||
|
@@ -4050,7 +4051,7 @@ static pid_t sh_ntfork(Shell_t *shp,cons
|
||
|
}
|
||
|
fail:
|
||
|
if(jobfork && spawnpid<0)
|
||
|
- job_fork(0);
|
||
|
+ job_fork(-2);
|
||
|
if(spawnpid < 0) switch(errno=shp->path_err)
|
||
|
{
|
||
|
case ENOENT:
|
||
|
@@ -4058,6 +4059,7 @@ static pid_t sh_ntfork(Shell_t *shp,cons
|
||
|
default:
|
||
|
errormsg(SH_DICT,ERROR_system(ERROR_NOEXEC),e_exec+4);
|
||
|
}
|
||
|
+ job_unlock();
|
||
|
}
|
||
|
else
|
||
|
exitset();
|