diff options
author | Wez Furlong <wez@php.net> | 2005-03-15 23:46:29 +0000 |
---|---|---|
committer | Wez Furlong <wez@php.net> | 2005-03-15 23:46:29 +0000 |
commit | 35b0b8de99ce7d759f24618715ec57ffd950d54e (patch) | |
tree | ec9876880063bcb744338229469f1693f8acc242 /Zend | |
parent | 06667585b54983831c8175e04f900735e68c06db (diff) | |
download | php-git-35b0b8de99ce7d759f24618715ec57ffd950d54e.tar.gz |
fix shutdown so that dl()'d modules are unloaded after all the dtors have
been called.
Diffstat (limited to 'Zend')
-rw-r--r-- | Zend/zend.c | 1 | ||||
-rw-r--r-- | Zend/zend_API.c | 23 | ||||
-rw-r--r-- | Zend/zend_modules.h | 1 |
3 files changed, 13 insertions, 12 deletions
diff --git a/Zend/zend.c b/Zend/zend.c index 2b28a21eb5..0000caeff4 100644 --- a/Zend/zend.c +++ b/Zend/zend.c @@ -844,6 +844,7 @@ static int exec_done_cb(zend_module_entry *module TSRMLS_DC) void zend_post_deactivate_modules(TSRMLS_D) { zend_hash_apply(&module_registry, (apply_func_t) exec_done_cb TSRMLS_CC); + zend_hash_apply(&module_registry, (apply_func_t) module_registry_unload_temp TSRMLS_CC); } diff --git a/Zend/zend_API.c b/Zend/zend_API.c index a781e13f64..2ef3db744b 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -1552,24 +1552,23 @@ int module_registry_request_startup(zend_module_entry *module TSRMLS_DC) } -/* for persistent modules - call request shutdown and flag NOT to erase - * for temporary modules - do nothing, and flag to erase - */ +/* call request shutdown for all modules */ int module_registry_cleanup(zend_module_entry *module TSRMLS_DC) { - switch (module->type) { - case MODULE_PERSISTENT: - if (module->request_shutdown_func) { + if (module->request_shutdown_func) { #if 0 - zend_printf("%s: Request shutdown\n", module->name); + zend_printf("%s: Request shutdown\n", module->name); #endif - module->request_shutdown_func(module->type, module->module_number TSRMLS_CC); - } - return 0; - break; + module->request_shutdown_func(module->type, module->module_number TSRMLS_CC); + } + return 0; +} + +int module_registry_unload_temp(zend_module_entry *module TSRMLS_DC) +{ + switch (module->type) { case MODULE_TEMPORARY: return 1; - break; } return 0; } diff --git a/Zend/zend_modules.h b/Zend/zend_modules.h index f41f10eed6..ac2f0430c2 100644 --- a/Zend/zend_modules.h +++ b/Zend/zend_modules.h @@ -89,6 +89,7 @@ extern ZEND_API HashTable module_registry; void module_destructor(zend_module_entry *module); int module_registry_cleanup(zend_module_entry *module TSRMLS_DC); int module_registry_request_startup(zend_module_entry *module TSRMLS_DC); +int module_registry_unload_temp(zend_module_entry *module TSRMLS_DC); #define ZEND_MODULE_DTOR (void (*)(void *)) module_destructor #endif |