summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBob Weinand <bobwei9@hotmail.com>2016-11-13 12:25:43 +0100
committerBob Weinand <bobwei9@hotmail.com>2016-11-13 12:25:43 +0100
commitdbd504eaa9bd6e5055d589753d5e9da5db3d15ab (patch)
treea0bd37c289603967a2589c83f41add572b2e714e
parent057ae377a06c1209921f66947e9644ecabbb9ccc (diff)
downloadphp-git-dbd504eaa9bd6e5055d589753d5e9da5db3d15ab.tar.gz
Fix phpdbg ZTS shutdown with USE_ZEND_ALLOC
-rw-r--r--sapi/phpdbg/phpdbg.c20
1 files changed, 13 insertions, 7 deletions
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