]> granicus.if.org Git - php/commitdiff
fix shutdown so that dl()'d modules are unloaded after all the dtors have
authorWez Furlong <wez@php.net>
Tue, 15 Mar 2005 23:46:29 +0000 (23:46 +0000)
committerWez Furlong <wez@php.net>
Tue, 15 Mar 2005 23:46:29 +0000 (23:46 +0000)
been called.

Zend/zend.c
Zend/zend_API.c
Zend/zend_modules.h

index 2b28a21eb508773a7a55f31d435c9bf1e4a2d510..0000caeff4cb1486bced2224f61467ae65c941db 100644 (file)
@@ -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);
 }
 
 
index a781e13f64396c0f6625af86c3c849d4f95b9c6f..2ef3db744bad12fbf40f3bc9ab47b720fc937fb6 100644 (file)
@@ -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;
 }
index f41f10eed6ac5466b93ad0f01b6b505be016bd55..ac2f0430c2b2ee67203b96a1ac48b59b478ab127 100644 (file)
@@ -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