]> granicus.if.org Git - php/commitdiff
- Fix crash when zend_mm_shutdown is called more than once.
authorAndi Gutmans <andi@php.net>
Sat, 22 Jun 2002 16:09:15 +0000 (16:09 +0000)
committerAndi Gutmans <andi@php.net>
Sat, 22 Jun 2002 16:09:15 +0000 (16:09 +0000)
Zend/zend_alloc.c
Zend/zend_mm.c

index 8dbc4a14625134e0aaa1c0f5db0fb050164be07d..46831ef314c5eb9e7bf42e4bb4442ea3c622a28f 100644 (file)
@@ -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));
index d418204340092022ae36f61cf666cb426f74fe24..5a6d9d2461be8823cd5fa097b0e7653a41730b5c 100644 (file)
@@ -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)