diff options
author | foobar <sniper@php.net> | 2005-01-09 16:30:22 +0000 |
---|---|---|
committer | foobar <sniper@php.net> | 2005-01-09 16:30:22 +0000 |
commit | 411f43f226d60d890fd36f92e0f303460b0534ee (patch) | |
tree | f552215740acd04a455b923e3d57c9663031f069 | |
parent | 541d8e10bb03d48c6f1d35f16d33265944870e77 (diff) | |
download | php-git-411f43f226d60d890fd36f92e0f303460b0534ee.tar.gz |
MFH: - Fix leaks with registered shutdown functions.
-rw-r--r-- | ext/standard/basic_functions.c | 13 | ||||
-rw-r--r-- | main/main.c | 3 | ||||
-rw-r--r-- | main/php_main.h | 3 |
3 files changed, 14 insertions, 5 deletions
diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index 7fbdab2150..eae406bdbf 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -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; diff --git a/main/main.c b/main/main.c index c70b849821..a7eac9e5dd 100644 --- a/main/main.c +++ b/main/main.c @@ -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 { diff --git a/main/php_main.h b/main/php_main.h index 26d3e7da00..bfbb6dd07f 100644 --- a/main/php_main.h +++ b/main/php_main.h @@ -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); |