svn commit: r263453 - head/bin/sh
Jilles Tjoelker
jilles at FreeBSD.org
Thu Mar 20 22:38:13 UTC 2014
Author: jilles
Date: Thu Mar 20 22:38:13 2014
New Revision: 263453
URL: http://svnweb.freebsd.org/changeset/base/263453
Log:
sh: Don't overwrite old exit status if a PID is reused.
Only store exit status for a process if that process has not terminated yet.
Test (slow):
exit 7 & p1=$!; until exit 8 & p2=$!; [ "$p1" = "$p2" ]; do wait "$p2";
done; sleep 0.1; wait %1; echo $?
should write "7".
Modified:
head/bin/sh/jobs.c
Modified: head/bin/sh/jobs.c
==============================================================================
--- head/bin/sh/jobs.c Thu Mar 20 22:03:37 2014 (r263452)
+++ head/bin/sh/jobs.c Thu Mar 20 22:38:13 2014 (r263453)
@@ -1121,7 +1121,8 @@ dowait(int mode, struct job *job)
for (sp = jp->ps ; sp < jp->ps + jp->nprocs ; sp++) {
if (sp->pid == -1)
continue;
- if (sp->pid == pid) {
+ if (sp->pid == pid && (sp->status == -1 ||
+ WIFSTOPPED(sp->status))) {
TRACE(("Changing status of proc %d from 0x%x to 0x%x\n",
(int)pid, sp->status,
status));
More information about the svn-src-all
mailing list