]> granicus.if.org Git - php/commitdiff
Fix phpdbg ZTS shutdown with USE_ZEND_ALLOC
authorBob Weinand <bobwei9@hotmail.com>
Sun, 13 Nov 2016 11:25:43 +0000 (12:25 +0100)
committerBob Weinand <bobwei9@hotmail.com>
Sun, 13 Nov 2016 11:25:43 +0000 (12:25 +0100)
sapi/phpdbg/phpdbg.c

index 3c6101c0f77733bb1784792f842b7bb838da99b5..f570763ca07ba2a90b2447f77f3dd211a2bb8c70 100644 (file)
@@ -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