about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBart Schaefer <schaefer@zsh.org>2022-04-30 11:21:03 -0700
committerBart Schaefer <schaefer@zsh.org>2022-04-30 11:21:03 -0700
commite127ceaae87414588d4c839fc4cc04f02c2ed8c5 (patch)
tree32afeea362f1961770bd3086b537bbb8f8fa4fa9
parent8181708feb35c647aa9b9692875a1ebf893ade6b (diff)
downloadzsh-e127ceaae87414588d4c839fc4cc04f02c2ed8c5.tar.gz
zsh-e127ceaae87414588d4c839fc4cc04f02c2ed8c5.tar.xz
zsh-e127ceaae87414588d4c839fc4cc04f02c2ed8c5.zip
50149: Remove all remaining =(...) files at shell exit
-rw-r--r--Etc/BUGS2
-rw-r--r--Src/builtin.c1
-rw-r--r--Src/jobs.c12
3 files changed, 13 insertions, 2 deletions
diff --git a/Etc/BUGS b/Etc/BUGS
index befae4477..e58fee721 100644
--- a/Etc/BUGS
+++ b/Etc/BUGS
@@ -48,8 +48,6 @@ related, probably obsolete, vared special case for $TERM set to "emacs".
 ------------------------------------------------------------------------
 47561: [PATCH v4] vcs_info: choose backend by basedir
 ------------------------------------------------------------------------
-39319: () { exit } =(:) doesn't clean up the tempfile
-------------------------------------------------------------------------
 48091: Bug in compdescribe with matcher 'b:-=+'
 ------------------------------------------------------------------------
 users/26071: Strange behavior about option completion of `git push        #`
diff --git a/Src/builtin.c b/Src/builtin.c
index b93466ba5..1cef7cce8 100644
--- a/Src/builtin.c
+++ b/Src/builtin.c
@@ -5860,6 +5860,7 @@ zexit(int val, enum zexit_t from_where)
 	/* send SIGHUP to any jobs left running  */
 	killrunjobs(from_where == ZEXIT_SIGNAL);
     }
+    cleanfilelists();
     if (isset(RCS) && interact) {
 	if (!nohistsave) {
 	    int writeflags = HFILE_USE_OPTIONS;
diff --git a/Src/jobs.c b/Src/jobs.c
index 85d4c4d1f..a91ef787f 100644
--- a/Src/jobs.c
+++ b/Src/jobs.c
@@ -1368,6 +1368,18 @@ deletefilelist(LinkList file_list, int disowning)
 
 /**/
 void
+cleanfilelists(void)
+{
+    int i;
+
+    DPUTS(shell_exiting >= 0, "BUG: cleanfilelists() before exit");
+ 
+    for (i = 1; i <= maxjob; i++)
+	deletefilelist(jobtab[i].filelist, 0);
+}
+
+/**/
+void
 freejob(Job jn, int deleting)
 {
     struct process *pn, *nx;