diff options
author | Zeev Suraski <zeev@php.net> | 2003-07-30 16:13:52 +0000 |
---|---|---|
committer | Zeev Suraski <zeev@php.net> | 2003-07-30 16:13:52 +0000 |
commit | 2fd4ffce1782c49c5bf583115e2b2ecbf126950d (patch) | |
tree | 9fb2c2e5a027a715448145b19c4b163fab9414c4 | |
parent | 81c5e49a68ab6d320be7f40edcd8baf46a78e185 (diff) | |
download | php-git-2fd4ffce1782c49c5bf583115e2b2ecbf126950d.tar.gz |
Add exec_finished() callback for modules - this is the last place where the
modules may touch the symbol table reliably
-rw-r--r-- | Zend/zend.c | 15 | ||||
-rw-r--r-- | Zend/zend.h | 6 | ||||
-rw-r--r-- | Zend/zend_API.c | 3 | ||||
-rw-r--r-- | Zend/zend_API.h | 2 | ||||
-rw-r--r-- | Zend/zend_compile.h | 4 | ||||
-rw-r--r-- | Zend/zend_modules.h | 5 |
6 files changed, 30 insertions, 5 deletions
diff --git a/Zend/zend.c b/Zend/zend.c index e3b5bc8a86..9bd65bb9fd 100644 --- a/Zend/zend.c +++ b/Zend/zend.c @@ -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) { diff --git a/Zend/zend.h b/Zend/zend.h index 6fe55a05c3..0fd5576610 100644 --- a/Zend/zend.h +++ b/Zend/zend.h @@ -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 diff --git a/Zend/zend_API.c b/Zend/zend_API.c index a9722a6c54..3b22dde873 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -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) { diff --git a/Zend/zend_API.h b/Zend/zend_API.h index 9a7271033c..b3606305c5 100644 --- a/Zend/zend_API.h +++ b/Zend/zend_API.h @@ -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) \ diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h index 64fceee26d..7bd5db3b90 100644 --- a/Zend/zend_compile.h +++ b/Zend/zend_compile.h @@ -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); diff --git a/Zend/zend_modules.h b/Zend/zend_modules.h index 188fcf5078..572f52c315 100644 --- a/Zend/zend_modules.h +++ b/Zend/zend_modules.h @@ -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; |