Index: main/main.c =================================================================== RCS file: /repository/php-src/main/main.c,v retrieving revision 1.626 diff -u -p -d -r1.626 main.c --- main/main.c 28 Apr 2005 07:50:53 -0000 1.626 +++ main/main.c 12 May 2005 07:51:32 -0000 @@ -1160,6 +1160,10 @@ void php_request_shutdown_for_hook(void } zend_end_try(); zend_try { + php_shutdown_stream_hashes(TSRMLS_C); + } zend_end_try(); + + zend_try { shutdown_memory_manager(CG(unclean_shutdown), 0 TSRMLS_CC); } zend_end_try(); @@ -1234,12 +1238,17 @@ void php_request_shutdown(void *dummy) sapi_deactivate(TSRMLS_C); } zend_end_try(); - /* 10. Free Willy (here be crashes) */ + /* 10. Destroy stream hashes */ + zend_try { + php_shutdown_stream_hashes(TSRMLS_C); + } zend_end_try(); + + /* 11. Free Willy (here be crashes) */ zend_try { shutdown_memory_manager(CG(unclean_shutdown) || !report_memleaks, 0 TSRMLS_CC); } zend_end_try(); - /* 11. Reset max_execution_time */ + /* 12. Reset max_execution_time */ zend_try { zend_unset_timeout(TSRMLS_C); } zend_end_try(); Index: main/php_streams.h =================================================================== RCS file: /repository/php-src/main/php_streams.h,v retrieving revision 1.101 diff -u -p -d -r1.101 php_streams.h --- main/php_streams.h 22 Feb 2005 00:24:13 -0000 1.101 +++ main/php_streams.h 12 May 2005 07:51:32 -0000 @@ -502,6 +502,7 @@ END_EXTERN_C() int php_init_stream_wrappers(int module_number TSRMLS_DC); int php_shutdown_stream_wrappers(int module_number TSRMLS_DC); +void php_shutdown_stream_hashes(TSRMLS_D); PHP_RSHUTDOWN_FUNCTION(streams); BEGIN_EXTERN_C() Index: main/streams/streams.c =================================================================== RCS file: /repository/php-src/main/streams/streams.c,v retrieving revision 1.77 diff -u -p -d -r1.77 streams.c --- main/streams/streams.c 29 Apr 2005 19:01:33 -0000 1.77 +++ main/streams/streams.c 12 May 2005 07:51:32 -0000 @@ -1378,6 +1378,21 @@ static void stream_resource_persistent_d FG(pclose_ret) = php_stream_free(stream, PHP_STREAM_FREE_CLOSE | PHP_STREAM_FREE_RSRC_DTOR); } +void php_shutdown_stream_hashes(TSRMLS_D) +{ + if (FG(stream_wrappers)) { + zend_hash_destroy(FG(stream_wrappers)); + efree(FG(stream_wrappers)); + FG(stream_wrappers) = NULL; + } + + if (FG(stream_filters)) { + zend_hash_destroy(FG(stream_filters)); + efree(FG(stream_filters)); + FG(stream_filters) = NULL; + } +} + int php_init_stream_wrappers(int module_number TSRMLS_DC) { le_stream = zend_register_list_destructors_ex(stream_resource_regular_dtor, NULL, "stream", module_number); Index: ext/standard/basic_functions.c =================================================================== RCS file: /repository/php-src/ext/standard/basic_functions.c,v retrieving revision 1.715 diff -u -p -d -r1.715 basic_functions.c --- ext/standard/basic_functions.c 11 May 2005 11:43:10 -0000 1.715 +++ ext/standard/basic_functions.c 12 May 2005 07:51:32 -0000 @@ -1221,18 +1221,6 @@ PHP_RSHUTDOWN_FUNCTION(basic) } STR_FREE(BG(locale_string)); - if (FG(stream_wrappers)) { - zend_hash_destroy(FG(stream_wrappers)); - efree(FG(stream_wrappers)); - FG(stream_wrappers) = NULL; - } - - if (FG(stream_filters)) { - zend_hash_destroy(FG(stream_filters)); - efree(FG(stream_filters)); - FG(stream_filters) = NULL; - } - PHP_RSHUTDOWN(filestat)(SHUTDOWN_FUNC_ARGS_PASSTHRU); #ifdef HAVE_SYSLOG_H PHP_RSHUTDOWN(syslog)(SHUTDOWN_FUNC_ARGS_PASSTHRU);