summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXinchen Hui <laruence@php.net>2015-03-09 11:19:05 +0800
committerXinchen Hui <laruence@php.net>2015-03-09 11:19:05 +0800
commit96f7a33df6e72dc855b82140ab10ddeaaf19b20c (patch)
treefe7355054be216794039feb1cdedaa7e45600979
parent69d183dd1926c4f1b35f9303e6960732f71e29de (diff)
downloadphp-git-96f7a33df6e72dc855b82140ab10ddeaaf19b20c.tar.gz
Temorary fix for phpdbg segfault while use zend_mm_set_custom_handlers
-rw-r--r--Zend/zend_alloc.c3
-rw-r--r--sapi/phpdbg/phpdbg.c9
2 files changed, 11 insertions, 1 deletions
diff --git a/Zend/zend_alloc.c b/Zend/zend_alloc.c
index b066eb0b1f..6701ca4902 100644
--- a/Zend/zend_alloc.c
+++ b/Zend/zend_alloc.c
@@ -1950,6 +1950,9 @@ void zend_mm_shutdown(zend_mm_heap *heap, int full, int silent)
#if ZEND_MM_CUSTOM
if (heap->use_custom_heap) {
+ if (full) {
+ heap->_free(heap);
+ }
return;
}
#endif
diff --git a/sapi/phpdbg/phpdbg.c b/sapi/phpdbg/phpdbg.c
index 74bf84adff..a12811fb87 100644
--- a/sapi/phpdbg/phpdbg.c
+++ b/sapi/phpdbg/phpdbg.c
@@ -983,7 +983,14 @@ void *phpdbg_malloc_wrapper(size_t size) /* {{{ */
void phpdbg_free_wrapper(void *p) /* {{{ */
{
- zend_mm_free(phpdbg_mm_get_heap(), p);
+ zend_mm_heap *heap = phpdbg_mm_get_heap();
+ if (UNEXPECTED(heap == p)) {
+ /* TODO: heap maybe allocated by mmap(zend_mm_init) or malloc(USE_ZEND_ALLOC=0)
+ * let's prevent it from segfault for now
+ */
+ } else {
+ zend_mm_free(heap, p);
+ }
} /* }}} */
void *phpdbg_realloc_wrapper(void *ptr, size_t size) /* {{{ */