From: Andi Gutmans Date: Sat, 22 Jun 2002 16:09:15 +0000 (+0000) Subject: - Fix crash when zend_mm_shutdown is called more than once. X-Git-Tag: php-4.3.0dev_zend2_alpha2~152 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7f226a6b199f8df969f0f46def6a26dbd4a75265;p=php - Fix crash when zend_mm_shutdown is called more than once. --- diff --git a/Zend/zend_alloc.c b/Zend/zend_alloc.c index 8dbc4a1462..46831ef314 100644 --- a/Zend/zend_alloc.c +++ b/Zend/zend_alloc.c @@ -451,8 +451,10 @@ ZEND_API void shutdown_memory_manager(int silent, int clean_cache TSRMLS_DC) zend_fast_cache_list_entry *fast_cache_list_entry, *next_fast_cache_list_entry; #ifdef ZEND_MM - zend_mm_shutdown(&AG(mm_heap)); - return; + if (clean_cache) { + zend_mm_shutdown(&AG(mm_heap)); + return; + } #elif defined(ZEND_WIN32) && !ZEND_DEBUG if (clean_cache && AG(memory_heap)) { HeapDestroy(AG(memory_heap)); diff --git a/Zend/zend_mm.c b/Zend/zend_mm.c index d418204340..5a6d9d2461 100644 --- a/Zend/zend_mm.c +++ b/Zend/zend_mm.c @@ -104,6 +104,7 @@ zend_bool zend_mm_add_memory_block(zend_mm_heap *heap, size_t block_size) if (!segment) { return 1; } +/* fprintf(stderr, "Allocating segment %X\n", segment); */ segment->next_segment = heap->segments_list; heap->segments_list = segment; @@ -147,8 +148,10 @@ void zend_mm_shutdown(zend_mm_heap *heap) while (segment) { prev = segment; segment = segment->next_segment; +/* fprintf(stderr, "Freeing segment %X\n", prev);*/ free(prev); } + heap->segments_list = NULL; } void *zend_mm_alloc(zend_mm_heap *heap, size_t size)