From 0cd2da03090350f3539658b0cd8f920b0395a708 Mon Sep 17 00:00:00 2001 From: Marcus Boerger Date: Sun, 25 Jul 2004 07:14:49 +0000 Subject: [PATCH] - Execute destructors earlier (Florian Schaper, fschaper at intux org) --- Zend/zend.c | 7 +++++++ Zend/zend.h | 1 + Zend/zend_execute.h | 1 + Zend/zend_execute_API.c | 7 ++++++- main/main.c | 4 ++++ 5 files changed, 19 insertions(+), 1 deletion(-) diff --git a/Zend/zend.c b/Zend/zend.c index a5c0e3ed69..9191a9af1c 100644 --- a/Zend/zend.c +++ b/Zend/zend.c @@ -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 */ diff --git a/Zend/zend.h b/Zend/zend.h index d3ad270795..23375230f5 100644 --- a/Zend/zend.h +++ b/Zend/zend.h @@ -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); diff --git a/Zend/zend_execute.h b/Zend/zend_execute.h index d4d02a49e7..2ff6ba25eb 100644 --- a/Zend/zend_execute.h +++ b/Zend/zend_execute.h @@ -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); diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c index 8c763f28be..11786e9450 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -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(); diff --git a/main/main.c b/main/main.c index 84949ccd49..9d4373f12b 100644 --- a/main/main.c +++ b/main/main.c @@ -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(); -- 2.40.0