54 lines
1.4 KiB
Diff
54 lines
1.4 KiB
Diff
|
commit 98b29d02ca17068779f4b8fa2d43c9753386478f
|
||
|
Author: Bart Schaefer <barts@users.sourceforge.net>
|
||
|
Date: Wed Jun 15 15:38:14 2011 +0000
|
||
|
|
||
|
29481: always return a matching job in findproc() but scan the whole list
|
||
|
to prefer running jobs
|
||
|
|
||
|
diff --git a/Src/jobs.c b/Src/jobs.c
|
||
|
index 0ace80b..9c9b12f 100644
|
||
|
--- a/Src/jobs.c
|
||
|
+++ b/Src/jobs.c
|
||
|
@@ -160,6 +160,8 @@ findproc(pid_t pid, Job *jptr, Process *pptr, int aux)
|
||
|
Process pn;
|
||
|
int i;
|
||
|
|
||
|
+ *jptr = NULL;
|
||
|
+ *pptr = NULL;
|
||
|
for (i = 1; i <= maxjob; i++)
|
||
|
{
|
||
|
/*
|
||
|
@@ -189,16 +191,16 @@ findproc(pid_t pid, Job *jptr, Process *pptr, int aux)
|
||
|
* the termination of the process which pid we were supposed
|
||
|
* to return in a different job.
|
||
|
*/
|
||
|
- if (pn->pid == pid && (pn->status == SP_RUNNING ||
|
||
|
- WIFSTOPPED(pn->status))) {
|
||
|
+ if (pn->pid == pid) {
|
||
|
*pptr = pn;
|
||
|
*jptr = jobtab + i;
|
||
|
- return 1;
|
||
|
+ if (pn->status == SP_RUNNING)
|
||
|
+ return 1;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
- return 0;
|
||
|
+ return (*pptr && *jptr);
|
||
|
}
|
||
|
|
||
|
/* Does the given job number have any processes? */
|
||
|
diff --git a/Src/signals.c b/Src/signals.c
|
||
|
index 456a853..a848acd 100644
|
||
|
--- a/Src/signals.c
|
||
|
+++ b/Src/signals.c
|
||
|
@@ -489,7 +489,6 @@ wait_for_processes(void)
|
||
|
* Find the process and job containing this pid and
|
||
|
* update it.
|
||
|
*/
|
||
|
- pn = NULL;
|
||
|
if (findproc(pid, &jn, &pn, 0)) {
|
||
|
#if defined(HAVE_WAIT3) && defined(HAVE_GETRUSAGE)
|
||
|
struct timezone dummy_tz;
|