Index: main/main.c =================================================================== RCS file: /repository/php-src/main/main.c,v retrieving revision 1.604.2.14 diff -u -p -d -r1.604.2.14 main.c --- main/main.c 27 Apr 2005 21:23:44 -0000 1.604.2.14 +++ main/main.c 12 May 2005 07:51:20 -0000 @@ -1162,6 +1162,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(); @@ -1228,6 +1232,10 @@ void php_request_shutdown(void *dummy) } zend_end_try(); zend_try { + php_shutdown_stream_hashes(TSRMLS_C); + } zend_end_try(); + + zend_try { shutdown_memory_manager(CG(unclean_shutdown) || !report_memleaks, 0 TSRMLS_CC); } zend_end_try(); Index: main/php_streams.h =================================================================== RCS file: /repository/php-src/main/php_streams.h,v retrieving revision 1.95.2.3 diff -u -p -d -r1.95.2.3 php_streams.h --- main/php_streams.h 6 Apr 2005 14:47:51 -0000 1.95.2.3 +++ main/php_streams.h 12 May 2005 07:51:20 -0000 @@ -505,6 +505,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.61.2.10 diff -u -p -d -r1.61.2.10 streams.c --- main/streams/streams.c 11 Apr 2005 15:19:40 -0000 1.61.2.10 +++ main/streams/streams.c 12 May 2005 07:51:20 -0000 @@ -1367,6 +1367,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.673.2.16 diff -u -p -d -r1.673.2.16 basic_functions.c --- ext/standard/basic_functions.c 27 Apr 2005 15:44:06 -0000 1.673.2.16 +++ ext/standard/basic_functions.c 12 May 2005 07:51:21 -0000 @@ -1191,18 +1191,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);