diff options
author | Peter Stephenson <p.w.stephenson@ntlworld.com> | 2014-10-26 17:47:42 +0000 |
---|---|---|
committer | Peter Stephenson <p.w.stephenson@ntlworld.com> | 2014-10-26 17:47:42 +0000 |
commit | b4f7ccecd93ca9e64c3c3c774fdaefae83d7204a (patch) | |
tree | 492ba48008b5fa2c9370a7f4695540d6b8c7e89f /Src/signals.c | |
parent | e18b5bf0b2a1409ba5c88f8b61dbf65cdc235027 (diff) | |
download | zsh-b4f7ccecd93ca9e64c3c3c774fdaefae83d7204a.tar.gz zsh-b4f7ccecd93ca9e64c3c3c774fdaefae83d7204a.tar.xz zsh-b4f7ccecd93ca9e64c3c3c774fdaefae83d7204a.zip |
33531 with additions: retain status of exited background jobs.
Add linked list of unwaited-for background jobs. Truncate at value of _SC_CHILD_MAX discarding oldest. Remove old lastpid_status mechanism for latest exited process only. Slightly tighten safety of permanently allocated linked lists so that this doesn't compromise signal handling.
Diffstat (limited to 'Src/signals.c')
-rw-r--r-- | Src/signals.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/Src/signals.c b/Src/signals.c index 2df69f96e..e72850516 100644 --- a/Src/signals.c +++ b/Src/signals.c @@ -522,14 +522,14 @@ wait_for_processes(void) get_usage(); } /* - * Remember the status associated with $!, so we can - * wait for it even if it's exited. This value is - * only used if we can't find the PID in the job table, - * so it doesn't matter that the value we save here isn't - * useful until the process has exited. + * Accumulate a list of older jobs. We only do this for + * background jobs, which is something in the job table + * that's not marked as in the current shell or as shell builtin + * and is not equal to the current foreground job. */ - if (pn != NULL && pid == lastpid && lastpid_status != -1L) - lastpid_status = lastval2; + if (jn && !(jn->stat & (STAT_CURSH|STAT_BUILTIN)) && + jn - jobtab != thisjob) + addbgstatus(pid, (int)lastval2); } } |