about summary refs log tree commit diff
diff options
context:
space:
mode:
-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