76b1d02
diff -up ksh-20120801/src/cmd/ksh93/sh/subshell.c.retfix ksh-20120801/src/cmd/ksh93/sh/subshell.c
76b1d02
--- ksh-20120801/src/cmd/ksh93/sh/subshell.c.retfix	2014-09-01 13:50:02.956085721 +0200
76b1d02
+++ ksh-20120801/src/cmd/ksh93/sh/subshell.c	2014-09-01 13:54:01.104818416 +0200
76b1d02
@@ -652,6 +652,16 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_
76b1d02
 		}
76b1d02
 		else
76b1d02
 		{
76b1d02
+			if(comsub!=1 && shp->spid)
76b1d02
+			{
76b1d02
+				int c = shp->exitval;
76b1d02
+				job_wait(shp->spid);
76b1d02
+				shp->exitval = c;
76b1d02
+				exitset();
76b1d02
+				if(shp->pipepid==shp->spid)
76b1d02
+					shp->spid = 0;
76b1d02
+				shp->pipepid = 0;
76b1d02
+			}
76b1d02
 			job.hack1_waitall=0;
76b1d02
 			/* move tmp file to iop and restore sfstdout */
76b1d02
 			iop = sfswap(sfstdout,NIL(Sfio_t*));