mirror of
https://github.com/php/php-src.git
synced 2024-09-21 18:07:23 +00:00
Add exec_finished() callback for modules - this is the last place where the
modules may touch the symbol table reliably
This commit is contained in:
parent
81c5e49a68
commit
2fd4ffce17
15
Zend/zend.c
15
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)
|
||||
{
|
||||
|
@ -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
|
||||
|
@ -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) {
|
||||
|
@ -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) \
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user