summary refs log tree commit diff
path: root/Src
diff options
context:
space:
mode:
authorBart Schaefer <barts@users.sourceforge.net>2011-06-15 15:38:14 +0000
committerBart Schaefer <barts@users.sourceforge.net>2011-06-15 15:38:14 +0000
commit98b29d02ca17068779f4b8fa2d43c9753386478f (patch)
treeb35caa2bb1b08bc12911f710eef47a94f4f699ff /Src
parent4e556ac875effee0ecdbc1e0a35cba496d6e037c (diff)
downloadzsh-98b29d02ca17068779f4b8fa2d43c9753386478f.tar.gz
zsh-98b29d02ca17068779f4b8fa2d43c9753386478f.tar.xz
zsh-98b29d02ca17068779f4b8fa2d43c9753386478f.zip
29481: always return a matching job in findproc() but scan the whole list
to prefer running jobs
Diffstat (limited to 'Src')
-rw-r--r--Src/jobs.c10
-rw-r--r--Src/signals.c1
2 files changed, 6 insertions, 5 deletions
diff --git a/Src/jobs.c b/Src/jobs.c
index 0ace80b63..9c9b12f5e 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 456a85300..a848acdbe 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;