summaryrefslogtreecommitdiff
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.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