summaryrefslogtreecommitdiff
path: root/Zend/zend_alloc.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@php.net>2010-09-08 07:52:49 +0000
committerDmitry Stogov <dmitry@php.net>2010-09-08 07:52:49 +0000
commit411f9fbe4d034bacbcabf5aa1f95b2c273d38ee3 (patch)
tree13a87fe1fbbdc257975b669c3fecea462d9a6c4d /Zend/zend_alloc.c
parent7f9527bb220a8350432a2aa7018d5f14b5a7c2c1 (diff)
downloadphp-git-411f9fbe4d034bacbcabf5aa1f95b2c273d38ee3.tar.gz
We don't need to preallocate a memory segment in case we don't use zend memory manager
Diffstat (limited to 'Zend/zend_alloc.c')
-rw-r--r--Zend/zend_alloc.c24
1 files changed, 14 insertions, 10 deletions
diff --git a/Zend/zend_alloc.c b/Zend/zend_alloc.c
index 178bb69ed3..a7983b7126 100644
--- a/Zend/zend_alloc.c
+++ b/Zend/zend_alloc.c
@@ -1568,6 +1568,10 @@ ZEND_API void zend_mm_shutdown(zend_mm_heap *heap, int full_shutdown, int silent
zend_mm_segment *prev;
int internal;
+ if (!heap->use_zend_alloc) {
+ return;
+ }
+
if (heap->reserve) {
#if ZEND_DEBUG
if (!silent) {
@@ -2581,17 +2585,17 @@ ZEND_API void shutdown_memory_manager(int silent, int full_shutdown TSRMLS_DC)
static void alloc_globals_ctor(zend_alloc_globals *alloc_globals TSRMLS_DC)
{
- char *tmp;
- alloc_globals->mm_heap = zend_mm_startup();
+ char *tmp = getenv("USE_ZEND_ALLOC");
- tmp = getenv("USE_ZEND_ALLOC");
- if (tmp) {
- alloc_globals->mm_heap->use_zend_alloc = zend_atoi(tmp, 0);
- if (!alloc_globals->mm_heap->use_zend_alloc) {
- alloc_globals->mm_heap->_malloc = malloc;
- alloc_globals->mm_heap->_free = free;
- alloc_globals->mm_heap->_realloc = realloc;
- }
+ if (tmp && !zend_atoi(tmp, 0)) {
+ alloc_globals->mm_heap = malloc(sizeof(struct _zend_mm_heap));
+ memset(alloc_globals->mm_heap, 0, sizeof(struct _zend_mm_heap));
+ alloc_globals->mm_heap->use_zend_alloc = 0;
+ alloc_globals->mm_heap->_malloc = malloc;
+ alloc_globals->mm_heap->_free = free;
+ alloc_globals->mm_heap->_realloc = realloc;
+ } else {
+ alloc_globals->mm_heap = zend_mm_startup();
}
}