From faa787d323b2a5b40901838fb41ef865fb27b2a0 Mon Sep 17 00:00:00 2001 From: Jilles Tjoelker Date: Sat, 28 Jul 2012 14:32:55 +0000 Subject: [PATCH] sh: Track continued jobs (even if not continued by bg or fg). This uses wait3's WCONTINUED flag. There is no message for this. The change is visible in "jobs" or if the job stops again. --- bin/sh/jobs.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/bin/sh/jobs.c b/bin/sh/jobs.c index 1dc722f14c72..41bd909abc11 100644 --- a/bin/sh/jobs.c +++ b/bin/sh/jobs.c @@ -1027,7 +1027,8 @@ dowait(int block, struct job *job) pid = waitproc(block, &status); TRACE(("wait returns %d, status=%d\n", (int)pid, status)); } while ((pid == -1 && errno == EINTR && breakwaitcmd == 0) || - (pid > 0 && WIFSTOPPED(status) && !iflag)); + (pid > 0 && (WIFSTOPPED(status) || WIFCONTINUED(status)) && + !iflag)); if (pid == -1 && errno == ECHILD && job != NULL) job->state = JOBDONE; if (breakwaitcmd != 0) { @@ -1050,7 +1051,11 @@ dowait(int block, struct job *job) TRACE(("Changing status of proc %d from 0x%x to 0x%x\n", (int)pid, sp->status, status)); - sp->status = status; + if (WIFCONTINUED(status)) { + sp->status = -1; + jp->state = 0; + } else + sp->status = status; thisjob = jp; } if (sp->status == -1) @@ -1118,7 +1123,7 @@ waitproc(int block, int *status) int flags; #if JOBS - flags = WUNTRACED; + flags = WUNTRACED | WCONTINUED; #else flags = 0; #endif