diff --git a/Zend/zend_API.h b/Zend/zend_API.h index d1064970dcd5..da0cb8aff3e3 100644 --- a/Zend/zend_API.h +++ b/Zend/zend_API.h @@ -229,6 +229,7 @@ typedef struct _zend_fcall_info_cache { #define ZEND_MODULE_INFO_N(module) zm_info_##module #define ZEND_MODULE_GLOBALS_CTOR_N(module) zm_globals_ctor_##module #define ZEND_MODULE_GLOBALS_DTOR_N(module) zm_globals_dtor_##module +#define ZEND_MODULE_CHILD_INIT_N(module) zm_child_init_##module /* Declaration macros */ #define ZEND_MODULE_STARTUP_D(module) zend_result ZEND_MODULE_STARTUP_N(module)(INIT_FUNC_ARGS) @@ -239,6 +240,7 @@ typedef struct _zend_fcall_info_cache { #define ZEND_MODULE_INFO_D(module) ZEND_COLD void ZEND_MODULE_INFO_N(module)(ZEND_MODULE_INFO_FUNC_ARGS) #define ZEND_MODULE_GLOBALS_CTOR_D(module) void ZEND_MODULE_GLOBALS_CTOR_N(module)(zend_##module##_globals *module##_globals) #define ZEND_MODULE_GLOBALS_DTOR_D(module) void ZEND_MODULE_GLOBALS_DTOR_N(module)(zend_##module##_globals *module##_globals) +#define ZEND_MODULE_CHILD_INIT_D(module) void ZEND_MODULE_CHILD_INIT_N(module)(void) #define ZEND_GET_MODULE(name) \ BEGIN_EXTERN_C()\ @@ -1159,6 +1161,7 @@ static zend_always_inline bool ZVAL_FSTRING(zval *z, const char *s) { #define ZEND_MINFO ZEND_MODULE_INFO_N #define ZEND_GINIT(module) ((void (*)(void*))(ZEND_MODULE_GLOBALS_CTOR_N(module))) #define ZEND_GSHUTDOWN(module) ((void (*)(void*))(ZEND_MODULE_GLOBALS_DTOR_N(module))) +#define ZEND_CINIT ZEND_MODULE_CHILD_INIT_N #define ZEND_MINIT_FUNCTION ZEND_MODULE_STARTUP_D #define ZEND_MSHUTDOWN_FUNCTION ZEND_MODULE_SHUTDOWN_D @@ -1167,6 +1170,7 @@ static zend_always_inline bool ZVAL_FSTRING(zval *z, const char *s) { #define ZEND_MINFO_FUNCTION ZEND_MODULE_INFO_D #define ZEND_GINIT_FUNCTION ZEND_MODULE_GLOBALS_CTOR_D #define ZEND_GSHUTDOWN_FUNCTION ZEND_MODULE_GLOBALS_DTOR_D +#define ZEND_CINIT_FUNCTION ZEND_MODULE_CHILD_INIT_D /* May modify arg in-place. Will free arg in failure case (and take ownership in success case). * Prefer using the ZEND_TRY_ASSIGN_* macros over these APIs. */ diff --git a/Zend/zend_modules.h b/Zend/zend_modules.h index a941fd063a5b..b55a8f92b2a7 100644 --- a/Zend/zend_modules.h +++ b/Zend/zend_modules.h @@ -37,11 +37,21 @@ #define USING_ZTS 0 #endif -#define STANDARD_MODULE_HEADER_EX sizeof(zend_module_entry), ZEND_MODULE_API_NO, ZEND_DEBUG, USING_ZTS +#define STANDARD_MODULE_HEADER_EX \ + .size = sizeof(zend_module_entry), \ + .zend_api = ZEND_MODULE_API_NO, \ + .zend_debug = ZEND_DEBUG, \ + .zts = USING_ZTS \ + #define STANDARD_MODULE_HEADER \ - STANDARD_MODULE_HEADER_EX, NULL, NULL + STANDARD_MODULE_HEADER_EX, \ + .ini_entry = NULL, \ + .deps = NULL + #define ZE2_STANDARD_MODULE_HEADER \ - STANDARD_MODULE_HEADER_EX, ini_entries, NULL + STANDARD_MODULE_HEADER_EX, \ + .ini_entry = ini_entries, \ + .deps = NULL #define ZEND_MODULE_BUILD_ID "API" ZEND_TOSTR(ZEND_MODULE_API_NO) ZEND_BUILD_TS ZEND_BUILD_DEBUG ZEND_BUILD_SYSTEM ZEND_BUILD_EXTRA @@ -52,7 +62,17 @@ .module_number = 0, \ .build_id = ZEND_MODULE_BUILD_ID -#define NO_MODULE_GLOBALS 0, NULL, NULL, NULL +#ifdef ZTS +# define GLOBALS_PTR_INITIALIZER .globals_id_ptr = NULL +#else +# define GLOBALS_PTR_INITIALIZER .globals_ptr = NULL +#endif + +#define NO_MODULE_GLOBALS \ + .globals_size = 0, \ + GLOBALS_PTR_INITIALIZER, \ + .globals_ctor = NULL, \ + .globals_dtor = NULL #ifdef ZTS # define ZEND_MODULE_GLOBALS(module_name) sizeof(zend_##module_name##_globals), &module_name##_globals_id @@ -61,7 +81,10 @@ #endif #define STANDARD_MODULE_PROPERTIES \ - NO_MODULE_GLOBALS, NULL, STANDARD_MODULE_PROPERTIES_EX + NO_MODULE_GLOBALS, \ + .post_deactivate_func = NULL, \ + .child_init_func = NULL, \ + STANDARD_MODULE_PROPERTIES_EX #define NO_VERSION_YET NULL diff --git a/ext/session/session.c b/ext/session/session.c index c15941b74523..5ec5b36dea5a 100644 --- a/ext/session/session.c +++ b/ext/session/session.c @@ -3450,7 +3450,7 @@ static zend_result php_session_rfc1867_callback(unsigned int event, void *event_ return retval; } -PHP_CINIT_FUNCTION(session) +static PHP_CINIT_FUNCTION(session) { /* Give each child a distinct, widely separated GC sequence without requesting new entropy. */ uint64_t advance = (uint64_t) getpid() << 32; diff --git a/ext/zend_test/test.c b/ext/zend_test/test.c index 5c33722c5ca3..7f3b15393e00 100644 --- a/ext/zend_test/test.c +++ b/ext/zend_test/test.c @@ -2599,7 +2599,7 @@ PHP_MINFO_FUNCTION(zend_test) DISPLAY_INI_ENTRIES(); } -static void zend_test_child_init(void) +static PHP_CINIT_FUNCTION(zend_test) { ZT_G(child_init_count)++; } @@ -2619,7 +2619,7 @@ zend_module_entry zend_test_module_entry = { PHP_GSHUTDOWN(zend_test), NULL, STANDARD_MODULE_PROPERTIES_EX, - .child_init_func = zend_test_child_init + .child_init_func = PHP_CINIT(zend_test) }; #ifdef COMPILE_DL_ZEND_TEST diff --git a/main/php.h b/main/php.h index e5a6d6f9633f..264f2ea026ca 100644 --- a/main/php.h +++ b/main/php.h @@ -369,7 +369,7 @@ END_EXTERN_C() #define PHP_MINFO ZEND_MODULE_INFO_N #define PHP_GINIT ZEND_GINIT #define PHP_GSHUTDOWN ZEND_GSHUTDOWN -#define PHP_CINIT(module) php_##module##_child_init +#define PHP_CINIT ZEND_CINIT #define PHP_MINIT_FUNCTION ZEND_MODULE_STARTUP_D #define PHP_MSHUTDOWN_FUNCTION ZEND_MODULE_SHUTDOWN_D @@ -378,7 +378,7 @@ END_EXTERN_C() #define PHP_MINFO_FUNCTION ZEND_MODULE_INFO_D #define PHP_GINIT_FUNCTION ZEND_GINIT_FUNCTION #define PHP_GSHUTDOWN_FUNCTION ZEND_GSHUTDOWN_FUNCTION -#define PHP_CINIT_FUNCTION(module) static void php_##module##_child_init(void) +#define PHP_CINIT_FUNCTION ZEND_CINIT_FUNCTION #define PHP_MODULE_GLOBALS ZEND_MODULE_GLOBALS