]> granicus.if.org Git - php/commitdiff
- Execute destructors earlier (Florian Schaper, fschaper at intux org)
authorMarcus Boerger <helly@php.net>
Sun, 25 Jul 2004 07:14:49 +0000 (07:14 +0000)
committerMarcus Boerger <helly@php.net>
Sun, 25 Jul 2004 07:14:49 +0000 (07:14 +0000)
Zend/zend.c
Zend/zend.h
Zend/zend_execute.h
Zend/zend_execute_API.c
main/main.c

index a5c0e3ed69b3d436d00f8f20cca1200112e833b5..9191a9af1c242cf0d84349cf09529bc2cc3d4e2b 100644 (file)
@@ -805,6 +805,13 @@ void zend_deactivate_modules(TSRMLS_D)
        } zend_end_try();
 }
 
+void zend_call_destructors(TSRMLS_D) 
+{
+       zend_try {
+               shutdown_destructors(TSRMLS_C);
+       } zend_end_try();
+}
+
 void zend_deactivate(TSRMLS_D)
 {
        /* we're no longer executing anything */
index d3ad270795ce9d30d1c3086670f9a342ab5fbe4a..23375230f53af1f4d0df05c5ce8b7e16e70e84b6 100644 (file)
@@ -450,6 +450,7 @@ END_EXTERN_C()
 
 void zend_activate(TSRMLS_D);
 void zend_deactivate(TSRMLS_D);
+void zend_call_destructors(TSRMLS_D);
 void zend_activate_modules(TSRMLS_D);
 void zend_deactivate_modules(TSRMLS_D);
 void zend_post_deactivate_modules(TSRMLS_D);
index d4d02a49e70a18017de7495dfc9c4d8e057e4392..2ff6ba25eb486eeb3ac710b7d09211bc4e4170bb 100644 (file)
@@ -49,6 +49,7 @@ ZEND_API extern void (*zend_execute_internal)(zend_execute_data *execute_data_pt
 
 void init_executor(TSRMLS_D);
 void shutdown_executor(TSRMLS_D);
+void shutdown_destructors(TSRMLS_D);
 ZEND_API void execute(zend_op_array *op_array TSRMLS_DC);
 ZEND_API void execute_internal(zend_execute_data *execute_data_ptr, int return_value_used TSRMLS_DC);
 ZEND_API int zend_is_true(zval *op);
index 8c763f28be566a469bc3db33e3f6a54dc66cbc7f..11786e945065e9712f00a66ec579921d28ee45b2 100644 (file)
@@ -187,6 +187,12 @@ void init_executor(TSRMLS_D)
        EG(float_separator)[0] = '.';
 }
 
+void shutdown_destructors(TSRMLS_D) {
+       zend_try {
+               zend_objects_store_call_destructors(&EG(objects_store) TSRMLS_CC);
+       } zend_end_try();
+}
+
 void shutdown_executor(TSRMLS_D)
 {
        zend_try {
@@ -206,7 +212,6 @@ void shutdown_executor(TSRMLS_D)
                }
 */
                zend_llist_apply(&zend_extensions, (llist_apply_func_t) zend_extension_deactivator TSRMLS_CC);
-               zend_objects_store_call_destructors(&EG(objects_store) TSRMLS_CC);
                zend_hash_graceful_reverse_destroy(&EG(symbol_table));
        } zend_end_try();
 
index 84949ccd49f5abc19b578f2b314f3d72dfa26cde..9d4373f12b94d452f330fce4c2b3b983940b5da7 100644 (file)
@@ -1190,6 +1190,10 @@ void php_request_shutdown(void *dummy)
                sapi_send_headers(TSRMLS_C);
        } zend_end_try();
 
+       zend_try {
+               zend_call_destructors(TSRMLS_C);
+       } zend_end_try();
+
        if (PG(modules_activated)) zend_try {
                php_call_shutdown_functions();
        } zend_end_try();