sniper Sun Apr 24 10:49:01 2005 EDT Modified files: (Branch: PHP_5_0) /ZendEngine2 zend.c zend.h zend_execute.h zend_execute_API.c /ZendEngine2/tests bug20240.phpt /php-src/main main.c Log: MFH: - Execute destructors earlier http://cvs.php.net/diff.php/ZendEngine2/zend.c?r1=1.287.2.4&r2=1.287.2.5&ty=u Index: ZendEngine2/zend.c diff -u ZendEngine2/zend.c:1.287.2.4 ZendEngine2/zend.c:1.287.2.5 --- ZendEngine2/zend.c:1.287.2.4 Tue Mar 15 18:47:12 2005 +++ ZendEngine2/zend.c Sun Apr 24 10:49:00 2005 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend.c,v 1.287.2.4 2005/03/15 23:47:12 wez Exp $ */ +/* $Id: zend.c,v 1.287.2.5 2005/04/24 14:49:00 sniper Exp $ */ #include "zend.h" #include "zend_extensions.h" @@ -803,6 +803,13 @@ } 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 */ http://cvs.php.net/diff.php/ZendEngine2/zend.h?r1=1.257.2.23&r2=1.257.2.24&ty=u Index: ZendEngine2/zend.h diff -u ZendEngine2/zend.h:1.257.2.23 ZendEngine2/zend.h:1.257.2.24 --- ZendEngine2/zend.h:1.257.2.23 Thu Mar 10 06:30:44 2005 +++ ZendEngine2/zend.h Sun Apr 24 10:49:00 2005 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend.h,v 1.257.2.23 2005/03/10 11:30:44 hyanantha Exp $ */ +/* $Id: zend.h,v 1.257.2.24 2005/04/24 14:49:00 sniper Exp $ */ #ifndef ZEND_H #define ZEND_H @@ -452,6 +452,7 @@ 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); http://cvs.php.net/diff.php/ZendEngine2/zend_execute.h?r1=1.72&r2=1.72.2.1&ty=u Index: ZendEngine2/zend_execute.h diff -u ZendEngine2/zend_execute.h:1.72 ZendEngine2/zend_execute.h:1.72.2.1 --- ZendEngine2/zend_execute.h:1.72 Tue Mar 16 05:14:52 2004 +++ ZendEngine2/zend_execute.h Sun Apr 24 10:49:00 2005 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_execute.h,v 1.72 2004/03/16 10:14:52 helly Exp $ */ +/* $Id: zend_execute.h,v 1.72.2.1 2005/04/24 14:49:00 sniper Exp $ */ #ifndef ZEND_EXECUTE_H #define ZEND_EXECUTE_H @@ -49,6 +49,7 @@ 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); http://cvs.php.net/diff.php/ZendEngine2/zend_execute_API.c?r1=1.287.2.12&r2=1.287.2.13&ty=u Index: ZendEngine2/zend_execute_API.c diff -u ZendEngine2/zend_execute_API.c:1.287.2.12 ZendEngine2/zend_execute_API.c:1.287.2.13 --- ZendEngine2/zend_execute_API.c:1.287.2.12 Sun Apr 3 17:57:06 2005 +++ ZendEngine2/zend_execute_API.c Sun Apr 24 10:49:00 2005 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_execute_API.c,v 1.287.2.12 2005/04/03 21:57:06 sniper Exp $ */ +/* $Id: zend_execute_API.c,v 1.287.2.13 2005/04/24 14:49:00 sniper Exp $ */ #include <stdio.h> #include <signal.h> @@ -185,6 +185,15 @@ EG(This) = NULL; } +void shutdown_destructors(TSRMLS_D) { + zend_try { + zend_objects_store_call_destructors(&EG(objects_store) TSRMLS_CC); + } zend_catch { + /* if we couldn't destruct cleanly, mark all objects as destructed anyway */ + zend_objects_store_mark_destructed(&EG(objects_store) TSRMLS_CC); + } zend_end_try(); +} + void shutdown_executor(TSRMLS_D) { zend_try { @@ -204,7 +213,6 @@ } */ 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_catch { /* if we couldn't destruct cleanly, mark all objects as destructed anyway */ http://cvs.php.net/diff.php/ZendEngine2/tests/bug20240.phpt?r1=1.4&r2=1.4.2.1&ty=u Index: ZendEngine2/tests/bug20240.phpt diff -u ZendEngine2/tests/bug20240.phpt:1.4 ZendEngine2/tests/bug20240.phpt:1.4.2.1 --- ZendEngine2/tests/bug20240.phpt:1.4 Sun Nov 30 08:18:56 2003 +++ ZendEngine2/tests/bug20240.phpt Sun Apr 24 10:49:00 2005 @@ -39,5 +39,5 @@ 2 3 Done -test::destructor test::__destruct +test::destructor http://cvs.php.net/diff.php/php-src/main/main.c?r1=1.604.2.12&r2=1.604.2.13&ty=u Index: php-src/main/main.c diff -u php-src/main/main.c:1.604.2.12 php-src/main/main.c:1.604.2.13 --- php-src/main/main.c:1.604.2.12 Tue Apr 19 13:33:16 2005 +++ php-src/main/main.c Sun Apr 24 10:49:00 2005 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: main.c,v 1.604.2.12 2005/04/19 17:33:16 andrey Exp $ */ +/* $Id: main.c,v 1.604.2.13 2005/04/24 14:49:00 sniper Exp $ */ /* {{{ includes */ @@ -1193,6 +1193,10 @@ 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(TSRMLS_C); } zend_end_try();
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php