]> granicus.if.org Git - php/commitdiff
MFH: - Fix leaks with registered shutdown functions.
authorfoobar <sniper@php.net>
Sun, 9 Jan 2005 16:30:22 +0000 (16:30 +0000)
committerfoobar <sniper@php.net>
Sun, 9 Jan 2005 16:30:22 +0000 (16:30 +0000)
ext/standard/basic_functions.c
main/main.c
main/php_main.h

index 7fbdab2150a77044b9e00caa060318ce2485b251..eae406bdbf0f5a8ba38e2ceced62df4ca436a051 100644 (file)
@@ -2161,14 +2161,21 @@ static int user_tick_function_compare(user_tick_function_entry * tick_fe1, user_
        }
 }
 
-void php_call_shutdown_functions(void)
+void php_call_shutdown_functions(TSRMLS_D)
 {
-       TSRMLS_FETCH();
-
        if (BG(user_shutdown_function_names))
                zend_try {
                        zend_hash_apply(BG(user_shutdown_function_names), (apply_func_t) user_shutdown_function_call TSRMLS_CC);
                        memcpy(&EG(bailout), &orig_bailout, sizeof(jmp_buf));
+                       php_free_shutdown_functions(TSRMLS_C);
+               }
+               zend_end_try();
+}
+
+void php_free_shutdown_functions(TSRMLS_D)
+{
+       if (BG(user_shutdown_function_names))
+               zend_try {
                        zend_hash_destroy(BG(user_shutdown_function_names));
                        FREE_HASHTABLE(BG(user_shutdown_function_names));
                        BG(user_shutdown_function_names) = NULL;
index c70b8498216542b99e3d3ce8339b3f456befe7c6..a7eac9e5dd0bb7d7af4e576f102a06b2a1b6de69 100644 (file)
@@ -975,11 +975,12 @@ void php_request_shutdown(void *dummy)
        } zend_end_try();
 
        if (PG(modules_activated)) zend_try {
-               php_call_shutdown_functions();
+               php_call_shutdown_functions(TSRMLS_C);
        } zend_end_try();
        
        if (PG(modules_activated)) {
                zend_deactivate_modules(TSRMLS_C);
+               php_free_shutdown_functions(TSRMLS_C);
        }
 
        zend_try {
index 26d3e7da00f9bb42960d6e57f547365cded24515..bfbb6dd07f97d6d888129f62b24c95018ec5ff97 100644 (file)
@@ -47,7 +47,8 @@ PHPAPI int php_handle_auth_data(const char *auth TSRMLS_DC);
 
 PHPAPI void php_html_puts(const char *str, uint siz TSRMLS_DC);
 
-extern void php_call_shutdown_functions(void);
+extern void php_call_shutdown_functions(TSRMLS_D);
+extern void php_free_shutdown_functions(TSRMLS_D);
 
 /* environment module */
 extern int php_init_environ(void);