about summary refs log tree commit diff
path: root/Src/mem.c
diff options
context:
space:
mode:
authorBarton E. Schaefer <schaefer@zsh.org>2014-01-18 21:22:11 -0800
committerBarton E. Schaefer <schaefer@zsh.org>2014-01-18 21:22:11 -0800
commit23f98c3e1d4792e32c616e1f73c383988bd86a9c (patch)
treeda55e3ad35ab3f47b0c52d8341919939a57ffa0c /Src/mem.c
parent1584318b97affe0a38f1b71233eaaa3a7076dae1 (diff)
downloadzsh-23f98c3e1d4792e32c616e1f73c383988bd86a9c.tar.gz
zsh-23f98c3e1d4792e32c616e1f73c383988bd86a9c.tar.xz
zsh-23f98c3e1d4792e32c616e1f73c383988bd86a9c.zip
32285: restart the fheap search in freeheap if the current fheap arena is about to be discarded; fixes crash
Diffstat (limited to 'Src/mem.c')
-rw-r--r--Src/mem.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/Src/mem.c b/Src/mem.c
index 5275c6c98..d15721c28 100644
--- a/Src/mem.c
+++ b/Src/mem.c
@@ -367,6 +367,15 @@ freeheap(void)
 	    }
 #endif
 	} else {
+	    if (h == fheap && h != heaps) {
+		/*
+		 * When deallocating the last arena with free space,
+		 * loop back through the list to find another one.
+		 */
+		fheap = NULL;
+		hn = heaps;
+		continue;
+	    }
 #ifdef USE_MMAP
 	    munmap((void *) h, h->size);
 #else