Hi, Was anybody able to look at this one? Resending in case it was missed during the Easter holidays.
Thanks, Siddhesh On Fri, Apr 22, 2011 at 5:34 PM, Siddhesh Poyarekar <[email protected]> wrote: > Hi, > > As demonstrated by the script below, ksh discards saved exit status of > a job if it is followed by a subshell execution. > > #!/bin/ksh > err () { return $1; } > > ( > err 12 > ) & > pid=$! > aa=$(/bin/date) > wait $pid > echo "(ret = $?)" > > I read through the code and found this loop (src/cmd/ksh93/sh/jobs.c) > ends up discarding all entries in the saved status list (bck.list) via > job_chksave() when a subshell tries to restore the old status list: > > void job_subrestore(void* ptr) > { > ... > for(jp=bck.list; jp; jp=jpnext) > { > jpnext = jp->next; > if(jp->pid==sh.spid) > { > jp->next = bp->list; > bp->list = jp; > bp->count++; > } > else > job_chksave(jp->pid); > } > ... > } > > The comparison with sh.spid is also moot since sh.spid is never > anything other than 0. Attached is a patch that simply replaces this > loop with code that does the restore by appending the old list to the > current bck.list. This passes regression tests in ksh-20110415 as well > as fixes the above reproducer. > > -- > Siddhesh Poyarekar > http://siddhesh.in > -- Siddhesh Poyarekar http://siddhesh.in _______________________________________________ ast-developers mailing list [email protected] https://mailman.research.att.com/mailman/listinfo/ast-developers
