about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2007-03-27 10:56:53 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2007-03-27 10:56:53 +0000
commit9fb47cff9d394dc111aeae79a6c99723b1465249 (patch)
tree3303df251af1a710803f51ff1e5faa87ffbcd31e
parent4b7b7f56f1cde7e317fce378d0d0e5c83686ff72 (diff)
downloadzsh-9fb47cff9d394dc111aeae79a6c99723b1465249.tar.gz
zsh-9fb47cff9d394dc111aeae79a6c99723b1465249.tar.xz
zsh-9fb47cff9d394dc111aeae79a6c99723b1465249.zip
23238: jobs didn't get deleted if they weren't printed
-rw-r--r--ChangeLog6
-rw-r--r--Src/jobs.c17
2 files changed, 21 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 039cac75c..b80371702 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2007-03-27  Peter Stephenson  <pws@csr.com>
+
+	* 23238: Src/jobs.c: job didn't get deleted from table
+	if it wasn't printed, leading to obscure problems with current
+	jobs.
+
 2007-03-26  Peter Stephenson  <pws@csr.com>
 
 	* unposted (follow-on from 23228): Doc/Zsh/calsys.yo,
diff --git a/Src/jobs.c b/Src/jobs.c
index 38666ef55..c201ecd96 100644
--- a/Src/jobs.c
+++ b/Src/jobs.c
@@ -806,7 +806,10 @@ should_report_time(Job j)
  * synch = 2 means called synchronously from jobs
  *
  * Returns 1 if some output was done.
-*/
+ *
+ * The function also deletes the job if it was done, even it
+ * is not printed.
+ */
 
 /**/
 int
@@ -818,8 +821,18 @@ printjob(Job jn, int lng, int synch)
     int doneprint = 0;
     FILE *fout = (synch == 2) ? stdout : shout;
 
-    if (jn->stat & STAT_NOPRINT)
+    if (jn->stat & STAT_NOPRINT) {
+	if (jn->stat & STAT_DONE) {
+	    deletejob(jn);
+	    if (job == curjob) {
+		curjob = prevjob;
+		prevjob = job;
+	    }
+	    if (job == prevjob)
+		setprevjob();
+	}
 	return 0;
+    }
 
     /*
      * Wow, what a hack.  Did I really write this? --- pws