summaryrefslogtreecommitdiff
path: root/Zend
diff options
context:
space:
mode:
authorWez Furlong <wez@php.net>2005-03-15 23:46:29 +0000
committerWez Furlong <wez@php.net>2005-03-15 23:46:29 +0000
commit35b0b8de99ce7d759f24618715ec57ffd950d54e (patch)
treeec9876880063bcb744338229469f1693f8acc242 /Zend
parent06667585b54983831c8175e04f900735e68c06db (diff)
downloadphp-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.c1
-rw-r--r--Zend/zend_API.c23
-rw-r--r--Zend/zend_modules.h1
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