]> granicus.if.org Git - php/commitdiff
Add exec_finished() callback for modules - this is the last place where the
authorZeev Suraski <zeev@php.net>
Wed, 30 Jul 2003 16:13:52 +0000 (16:13 +0000)
committerZeev Suraski <zeev@php.net>
Wed, 30 Jul 2003 16:13:52 +0000 (16:13 +0000)
modules may touch the symbol table reliably

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

index e3b5bc8a867aacd3c0b1d331c362863245d88e21..9bd65bb9fdd1450a2f9892a2ded1b2d01abdc5eb 100644 (file)
@@ -804,6 +804,21 @@ void zend_deactivate(TSRMLS_D)
 }
 
 
+static int exec_done_cb(zend_module_entry *module TSRMLS_DC)
+{
+       if (module->exec_finished_func) {
+               module->exec_finished_func();
+       }
+       return 0;
+}
+
+
+void zend_exec_finished(TSRMLS_D)
+{
+       zend_hash_apply(&module_registry, (apply_func_t) exec_done_cb TSRMLS_CC);
+}
+
+
 BEGIN_EXTERN_C()
 ZEND_API void zend_message_dispatcher(long message, void *data)
 {
index 6fe55a05c35ca187a9f6bdb89b42e71b5982a370..0fd5576610c6537a32698885a82638bc7cb2d898 100644 (file)
@@ -444,6 +444,12 @@ ZEND_API void zend_print_flat_zval_r(zval *expr TSRMLS_DC);
 ZEND_API void zend_print_zval_r_ex(zend_write_func_t write_func, zval *expr, int indent TSRMLS_DC);
 ZEND_API void zend_output_debug_string(zend_bool trigger_break, char *format, ...);
 
+void zend_activate(TSRMLS_D);
+void zend_deactivate(TSRMLS_D);
+void zend_activate_modules(TSRMLS_D);
+void zend_deactivate_modules(TSRMLS_D);
+void zend_exec_finished(TSRMLS_D);
+
 #if ZEND_DEBUG
 #define Z_DBG(expr)            (expr)
 #else
index a9722a6c54acf34e4af3ca402e5a30d222b70168..3b22dde8732946cf78383fd5d3bffada4eaa47dc 100644 (file)
@@ -1274,8 +1274,9 @@ void module_destructor(zend_module_entry *module)
        if (module->type == MODULE_TEMPORARY) {
                zend_clean_module_rsrc_dtors(module->module_number TSRMLS_CC);
                clean_module_constants(module->module_number TSRMLS_CC);
-               if (module->request_shutdown_func)
+               if (module->request_shutdown_func) {
                        module->request_shutdown_func(module->type, module->module_number TSRMLS_CC);
+               }
        }
 
        if (module->module_started && module->module_shutdown_func) {
index 9a7271033c211e0ff15cca4f4368e63ce4cc0f1e..b3606305c5f3cc064544d991cb2377523f61bac9 100644 (file)
@@ -48,6 +48,7 @@ BEGIN_EXTERN_C()
 #define ZEND_MODULE_SHUTDOWN_N(module)         zm_shutdown_##module
 #define ZEND_MODULE_ACTIVATE_N(module)         zm_activate_##module
 #define ZEND_MODULE_DEACTIVATE_N(module)       zm_deactivate_##module
+#define ZEND_MODULE_EXEC_FINISHED_N(module)    zm_exec_finished_##module
 #define ZEND_MODULE_INFO_N(module)                     zm_info_##module
 
 /* Declaration macros */
@@ -55,6 +56,7 @@ BEGIN_EXTERN_C()
 #define ZEND_MODULE_SHUTDOWN_D(module)         int ZEND_MODULE_SHUTDOWN_N(module)(SHUTDOWN_FUNC_ARGS)
 #define ZEND_MODULE_ACTIVATE_D(module)         int ZEND_MODULE_ACTIVATE_N(module)(INIT_FUNC_ARGS)
 #define ZEND_MODULE_DEACTIVATE_D(module)       int ZEND_MODULE_DEACTIVATE_N(module)(SHUTDOWN_FUNC_ARGS)
+#define ZEND_MODULE_EXEC_FINISHED_D(module)    int ZEND_MODULE_EXEC_FINISHED_N(module)(void)
 #define ZEND_MODULE_INFO_D(module)                     void ZEND_MODULE_INFO_N(module)(ZEND_MODULE_INFO_FUNC_ARGS)
 
 #define ZEND_GET_MODULE(name) \
index 64fceee26da6fc0bf033bd5d68c45f245a51b551..7bd5db3b902a918917901ac50cdbb53b1214553a 100644 (file)
@@ -249,11 +249,13 @@ void zend_init_compiler_data_structures(TSRMLS_D);
 
 extern ZEND_API zend_op_array *(*zend_compile_file)(zend_file_handle *file_handle, int type TSRMLS_DC);
 
+/*
 void zend_activate(TSRMLS_D);
 void zend_deactivate(TSRMLS_D);
 void zend_activate_modules(TSRMLS_D);
 void zend_deactivate_modules(TSRMLS_D);
-
+void zend_exec_finished(TSRMLS_D);
+*/
 
 ZEND_API int lex_scan(zval *zendlval TSRMLS_DC);
 void startup_scanner(TSRMLS_D);
index 188fcf50788d35a8f29f18467e63fd49d82ffe1a..572f52c3159ec4d39e67ded14de9c6f23216e132 100644 (file)
@@ -48,7 +48,7 @@ ZEND_API extern unsigned char third_arg_force_ref[];
 #define STANDARD_MODULE_PROPERTIES_EX 0, 0, 0, NULL, 0
 
 #define STANDARD_MODULE_PROPERTIES \
-       NULL, NULL, STANDARD_MODULE_PROPERTIES_EX
+       NULL, STANDARD_MODULE_PROPERTIES_EX
 
 #define NO_VERSION_YET NULL
 
@@ -72,8 +72,7 @@ struct _zend_module_entry {
        int (*request_shutdown_func)(SHUTDOWN_FUNC_ARGS);
        void (*info_func)(ZEND_MODULE_INFO_FUNC_ARGS);
        char *version;
-       int (*global_startup_func)(void);
-       int (*global_shutdown_func)(void);
+       int (*exec_finished_func)(void);
        int globals_id;
        int module_started;
        unsigned char type;