From: Bob Weinand Date: Sun, 13 Nov 2016 11:25:43 +0000 (+0100) Subject: Fix phpdbg ZTS shutdown with USE_ZEND_ALLOC X-Git-Tag: php-7.2.0alpha1~938^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=dbd504eaa9bd6e5055d589753d5e9da5db3d15ab;p=php Fix phpdbg ZTS shutdown with USE_ZEND_ALLOC --- diff --git a/sapi/phpdbg/phpdbg.c b/sapi/phpdbg/phpdbg.c index 3c6101c0f7..f570763ca0 100644 --- a/sapi/phpdbg/phpdbg.c +++ b/sapi/phpdbg/phpdbg.c @@ -1397,6 +1397,10 @@ int main(int argc, char **argv) /* {{{ */ char *read_from_stdin = NULL; zend_string *backup_phpdbg_compile = NULL; zend_bool show_help = 0, show_version = 0; + void* (*_malloc)(size_t); + void (*_free)(void*); + void* (*_realloc)(void*, size_t); + #ifndef _WIN32 struct sigaction sigio_struct; @@ -1684,9 +1688,6 @@ phpdbg_main: EXCEPTION_POINTERS *xp; __try { #endif - void* (*_malloc)(size_t); - void (*_free)(void*); - void* (*_realloc)(void*, size_t); if (show_version || show_help) { /* It ain't gonna proceed to real execution anyway, @@ -1767,6 +1768,8 @@ phpdbg_main: zend_mm_set_custom_handlers(mm_heap, _malloc, _free, _realloc); } + _free = PHPDBG_G(original_free_function); + phpdbg_init_list(); @@ -2167,10 +2170,6 @@ phpdbg_out: sapi_shutdown(); -#ifdef ZTS - ts_free_id(phpdbg_globals_id); -#endif - if (sapi_name) { free(sapi_name); } @@ -2182,6 +2181,13 @@ free_and_return: } #ifdef ZTS + /* reset to original handlers - otherwise PHPDBG_G() in phpdbg_watch_efree will be segfaulty (with e.g. USE_ZEND_ALLOC=0) */ + if (!use_mm_wrappers) { + zend_mm_set_custom_handlers(zend_mm_get_heap(), _malloc, _free, _realloc); + } + + ts_free_id(phpdbg_globals_id); + tsrm_shutdown(); #endif