Hi, I'm getting errors of hashtable already destroyed when running phpMyAdmin with PHP 5.3, and (of course), thinking this is a phar issue, I've traced through and found a problem in the shutdown order. Basically, php_request_shutdown() calls zend_deactivate() which calls zend_destroy_rsrc_list(&EG(regular_list)). On the next line, zend_post_deactivate_modules() is called, which steps through the module list and unloads all the dynamically loaded modules. If one of these modules (like mysqli) declares a resource type, then in module_destructor() zend_clean_module_rsrc_dtors() is called, which calls zend_clean_modules_rsrc_dtors_cb() (zend_list.c:253).
This function then walks over EG(regular_list), which had been previously destroyed. I think this issue could be fixed by moving the zend_destroy_rsrc_list(&EG(regular_list)) call after the module shutdown. I've attached a patch demonstrating the principle (this fixes the hashtable destroyed message and I don't get anything bad like a segfault). Could someone with more brains double-check this one? I think it can be reproduced with a debug build using mysqli loaded dynamically and any script that uses mysqli, but I've only reproduced it with phpMyAdmin. Thanks, Greg
Index: Zend/zend.c =================================================================== RCS file: /repository/ZendEngine2/zend.c,v retrieving revision 1.308.2.12.2.35.2.18 diff -u -r1.308.2.12.2.35.2.18 zend.c --- Zend/zend.c 29 Apr 2008 08:15:16 -0000 1.308.2.12.2.35.2.18 +++ Zend/zend.c 16 Jun 2008 02:53:00 -0000 @@ -901,7 +901,8 @@ shutdown_compiler(TSRMLS_C); } zend_end_try(); - zend_destroy_rsrc_list(&EG(regular_list) TSRMLS_CC); + /* shutdown order issue */ + /* zend_destroy_rsrc_list(&EG(regular_list) TSRMLS_CC); */ #ifdef ZEND_DEBUG if (GC_G(gc_enabled) && !CG(unclean_shutdown)) { Index: main/main.c =================================================================== RCS file: /repository/php-src/main/main.c,v retrieving revision 1.640.2.23.2.57.2.22 diff -u -r1.640.2.23.2.57.2.22 main.c --- main/main.c 21 May 2008 15:55:31 -0000 1.640.2.23.2.57.2.22 +++ main/main.c 16 Jun 2008 02:53:02 -0000 @@ -1527,6 +1527,8 @@ zend_post_deactivate_modules(TSRMLS_C); } zend_end_try(); + zend_destroy_rsrc_list(&EG(regular_list) TSRMLS_CC); + /* 9. SAPI related shutdown (free stuff) */ zend_try { sapi_deactivate(TSRMLS_C);
-- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php