diff options
author | Bob Weinand <bobwei9@hotmail.com> | 2014-06-03 21:00:45 +0000 |
---|---|---|
committer | Bob Weinand <bobwei9@hotmail.com> | 2014-06-03 21:03:42 +0000 |
commit | 467b19a9486a745aca86d7aff22bb2a3b669d52d (patch) | |
tree | 9e2faa40fab156db6d93ece1ecbb78cbacc08a34 | |
parent | 17039ed362a3dd02efe0f9c50f02c86f5d2c0de8 (diff) | |
download | php-git-467b19a9486a745aca86d7aff22bb2a3b669d52d.tar.gz |
Fixed startup segfault in non-debug builds
Fixes issue #87
-rw-r--r-- | phpdbg.c | 47 |
1 files changed, 35 insertions, 12 deletions
@@ -879,6 +879,32 @@ void phpdbg_signal_handler(int sig, siginfo_t *info, void *context) { } #endif +static inline zend_mm_heap *phpdbg_mm_get_heap() { + zend_mm_heap *mm_heap; + + TSRMLS_FETCH(); + + mm_heap = zend_mm_set_heap(NULL TSRMLS_CC); + zend_mm_set_heap(mm_heap TSRMLS_CC); + + return mm_heap; +} + +void *phpdbg_malloc_wrapper(size_t size) +{ + return zend_mm_alloc(phpdbg_mm_get_heap(), size); +} + +void phpdbg_free_wrapper(void *p) +{ + zend_mm_free(phpdbg_mm_get_heap(), p); +} + +void *phpdbg_realloc_wrapper(void *ptr, size_t size) +{ + return zend_mm_realloc(phpdbg_mm_get_heap(), ptr, size); +} + int main(int argc, char **argv) /* {{{ */ { sapi_module_struct *phpdbg = &phpdbg_sapi_module; @@ -1221,20 +1247,17 @@ phpdbg_main: EXCEPTION_POINTERS *xp; __try { #endif - zend_mm_heap *mm_heap = zend_mm_set_heap(NULL TSRMLS_CC); -#if ZEND_DEBUG - if (!mm_heap->use_zend_alloc) { - mm_heap->_malloc = malloc; - mm_heap->_realloc = realloc; - mm_heap->_free = free; -#endif - PHPDBG_G(original_free_function) = mm_heap->_free; - mm_heap->_free = phpdbg_watch_efree; + zend_mm_heap *mm_heap = phpdbg_mm_get_heap(); + + if (mm_heap->use_zend_alloc) { + mm_heap->_malloc = phpdbg_malloc_wrapper; + mm_heap->_realloc = phpdbg_realloc_wrapper; + mm_heap->_free = phpdbg_free_wrapper; mm_heap->use_zend_alloc = 0; -#if ZEND_DEBUG } -#endif - zend_mm_set_heap(mm_heap TSRMLS_CC); + + PHPDBG_G(original_free_function) = mm_heap->_free; + mm_heap->_free = phpdbg_watch_efree; zend_activate(TSRMLS_C); |