mirror of
https://github.com/php/php-src.git
synced 2026-03-24 00:02:20 +01:00
moved most of the core to use static tsrm ls cache pointer
plus apache2handler, cli and cgi
This commit is contained in:
@@ -22,6 +22,10 @@
|
||||
|
||||
typedef struct _tsrm_tls_entry tsrm_tls_entry;
|
||||
|
||||
#if defined(TSRM_WIN32)
|
||||
/* TSRMLS_CACHE_DEFINE; is already done in Zend, this is being always compiled statically. */
|
||||
#endif
|
||||
|
||||
struct _tsrm_tls_entry {
|
||||
void **storage;
|
||||
int count;
|
||||
|
||||
@@ -173,7 +173,8 @@ TSRM_API inline void *tsrm_get_ls_cache(void);
|
||||
#define TSRMG_STATIC(id, type, element) (((type) (*((void ***) _tsrm_ls_cache))[TSRM_UNSHUFFLE_RSRC_ID(id)])->element)
|
||||
#define TSRMLS_CACHE_EXTERN extern TSRM_TLS void *_tsrm_ls_cache
|
||||
#define TSRMLS_CACHE_DEFINE TSRM_TLS void *_tsrm_ls_cache
|
||||
#define TSRMLS_CACHE_UPDATE _tsrm_ls_cache = tsrm_get_ls_cache()
|
||||
#define TSRMLS_CACHE_UPDATE if (!TSRMLS_CACHE) _tsrm_ls_cache = tsrm_get_ls_cache()
|
||||
#define TSRMLS_CACHE _tsrm_ls_cache
|
||||
|
||||
/* BC only */
|
||||
#define TSRMLS_D
|
||||
@@ -196,6 +197,7 @@ TSRM_API inline void *tsrm_get_ls_cache(void);
|
||||
#define TSRMLS_CACHE_EXTERN
|
||||
#define TSRMLS_CACHE_DEFINE
|
||||
#define TSRMLS_CACHE_UPDATE
|
||||
#define TSRMLS_CACHE
|
||||
|
||||
/* BC only */
|
||||
#define TSRMLS_D void
|
||||
|
||||
@@ -2,4 +2,5 @@
|
||||
// $Id$
|
||||
|
||||
ADD_SOURCES("TSRM", "TSRM.c tsrm_strtok_r.c tsrm_win32.c");
|
||||
ADD_FLAG("CFLAGS_BD_TSRM", "/D ZEND_ENABLE_STATIC_TSRMLS_CACHE=1");
|
||||
|
||||
|
||||
@@ -42,6 +42,9 @@ static tsrm_win32_globals win32_globals;
|
||||
|
||||
static void tsrm_win32_ctor(tsrm_win32_globals *globals TSRMLS_DC)
|
||||
{
|
||||
#ifdef ZTS
|
||||
TSRMLS_CACHE_UPDATE;
|
||||
#endif
|
||||
globals->process = NULL;
|
||||
globals->shm = NULL;
|
||||
globals->process_size = 0;
|
||||
|
||||
@@ -68,7 +68,8 @@ typedef struct {
|
||||
} tsrm_win32_globals;
|
||||
|
||||
#ifdef ZTS
|
||||
# define TWG(v) TSRMG(win32_globals_id, tsrm_win32_globals *, v)
|
||||
# define TWG(v) TSRMG_STATIC(win32_globals_id, tsrm_win32_globals *, v)
|
||||
TSRMLS_CACHE_EXTERN;
|
||||
#else
|
||||
# define TWG(v) (win32_globals.v)
|
||||
#endif
|
||||
|
||||
@@ -465,6 +465,7 @@ static void compiler_globals_dtor(zend_compiler_globals *compiler_globals TSRMLS
|
||||
|
||||
static void executor_globals_ctor(zend_executor_globals *executor_globals TSRMLS_DC) /* {{{ */
|
||||
{
|
||||
ZEND_TSRMLS_CACHE_UPDATE;
|
||||
zend_startup_constants(TSRMLS_C);
|
||||
zend_copy_constants(EG(zend_constants), GLOBAL_CONSTANTS_TABLE);
|
||||
zend_init_rsrc_plist(TSRMLS_C);
|
||||
@@ -562,6 +563,7 @@ int zend_startup(zend_utility_functions *utility_functions, char **extensions TS
|
||||
#else
|
||||
extern zend_ini_scanner_globals ini_scanner_globals;
|
||||
extern zend_php_scanner_globals language_scanner_globals;
|
||||
ZEND_TSRMLS_CACHE_UPDATE;
|
||||
#endif
|
||||
|
||||
start_memory_manager(TSRMLS_C);
|
||||
|
||||
@@ -65,11 +65,13 @@
|
||||
#define ZEND_TSRMLS_CACHE_EXTERN TSRMLS_CACHE_EXTERN
|
||||
#define ZEND_TSRMLS_CACHE_DEFINE TSRMLS_CACHE_DEFINE
|
||||
#define ZEND_TSRMLS_CACHE_UPDATE TSRMLS_CACHE_UPDATE
|
||||
#define ZEND_TSRMLS_CACHE TSRMLS_CACHE
|
||||
#else
|
||||
#define ZEND_TSRMG TSRMG
|
||||
#define ZEND_TSRMLS_CACHE_EXTERN
|
||||
#define ZEND_TSRMLS_CACHE_DEFINE
|
||||
#define ZEND_TSRMLS_CACHE_UPDATE
|
||||
#define ZEND_TSRMLS_CACHE
|
||||
#endif
|
||||
|
||||
ZEND_TSRMLS_CACHE_EXTERN;
|
||||
|
||||
14
configure.in
14
configure.in
@@ -333,8 +333,8 @@ case $host_alias in
|
||||
;;
|
||||
*netware*)
|
||||
PHP_BUILD_PROGRAM
|
||||
PHP_ADD_SOURCES(/main, internal_functions.c,,PHP_GLOBAL_OBJS)
|
||||
PHP_ADD_SOURCES(win32, sendmail.c, -I$CFLAGS, PHP_GLOBAL_OBJS)
|
||||
PHP_ADD_SOURCES(/main, internal_functions.c, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1, PHP_GLOBAL_OBJS)
|
||||
PHP_ADD_SOURCES(win32, sendmail.c, -I$CFLAGS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1, PHP_GLOBAL_OBJS)
|
||||
PHP7LIB_SHARED_LIBADD=\$\(EXTRA_LIBS\)
|
||||
EXTENSION_DIR=sys:/php$PHP_MAJOR_VERSION/ext
|
||||
PHP_SUBST(PHP7LIB_SHARED_LIBADD)
|
||||
@@ -1454,20 +1454,20 @@ PHP_SUBST(install_binary_targets)
|
||||
|
||||
PHP_INSTALL_HEADERS([Zend/ TSRM/ include/ main/ main/streams/])
|
||||
|
||||
PHP_ADD_SOURCES(TSRM, TSRM.c tsrm_strtok_r.c)
|
||||
PHP_ADD_SOURCES(TSRM, TSRM.c tsrm_strtok_r.c, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1)
|
||||
|
||||
PHP_ADD_SOURCES(main, main.c snprintf.c spprintf.c php_sprintf.c \
|
||||
fopen_wrappers.c alloca.c php_scandir.c \
|
||||
php_ini.c SAPI.c rfc1867.c php_content_types.c strlcpy.c \
|
||||
strlcat.c mergesort.c reentrancy.c php_variables.c php_ticks.c \
|
||||
network.c php_open_temporary_file.c \
|
||||
output.c getopt.c)
|
||||
output.c getopt.c, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1)
|
||||
|
||||
PHP_ADD_SOURCES(main/streams, streams.c cast.c memory.c filter.c \
|
||||
plain_wrapper.c userspace.c transports.c xp_socket.c mmap.c \
|
||||
glob_wrapper.c)
|
||||
glob_wrapper.c, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1)
|
||||
|
||||
PHP_ADD_SOURCES(/main, internal_functions.c,, sapi)
|
||||
PHP_ADD_SOURCES(/main, internal_functions.c, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1, sapi)
|
||||
|
||||
case $host_alias in
|
||||
*netware*)
|
||||
@@ -1502,7 +1502,7 @@ else
|
||||
flag=
|
||||
fi
|
||||
|
||||
PHP_ADD_SOURCES_X(Zend, zend_execute.c,,PHP_GLOBAL_OBJS,,$flag)
|
||||
PHP_ADD_SOURCES_X(Zend, zend_execute.c, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1,PHP_GLOBAL_OBJS,,$flag)
|
||||
|
||||
PHP_ADD_BUILD_DIR(main main/streams)
|
||||
PHP_ADD_BUILD_DIR(TSRM)
|
||||
|
||||
@@ -81,6 +81,7 @@ static int php_output_handler_devnull_func(void **handler_context, php_output_co
|
||||
* Initialize the module globals on MINIT */
|
||||
static inline void php_output_init_globals(zend_output_globals *G)
|
||||
{
|
||||
ZEND_TSRMLS_CACHE_UPDATE;
|
||||
memset(G, 0, sizeof(*G));
|
||||
}
|
||||
/* }}} */
|
||||
@@ -160,7 +161,7 @@ PHPAPI void php_output_shutdown(void)
|
||||
PHPAPI int php_output_activate(TSRMLS_D)
|
||||
{
|
||||
#ifdef ZTS
|
||||
memset((*((void ***) tsrm_get_ls_cache()))[TSRM_UNSHUFFLE_RSRC_ID(output_globals_id)], 0, sizeof(zend_output_globals));
|
||||
memset((*((void ***) ZEND_TSRMLS_CACHE))[TSRM_UNSHUFFLE_RSRC_ID(output_globals_id)], 0, sizeof(zend_output_globals));
|
||||
#else
|
||||
memset(&output_globals, 0, sizeof(zend_output_globals));
|
||||
#endif
|
||||
|
||||
@@ -56,7 +56,7 @@ if test "$PHP_APXS2" != "no"; then
|
||||
esac
|
||||
done
|
||||
|
||||
APACHE_CFLAGS="$APACHE_CPPFLAGS -I$APXS_INCLUDEDIR $APR_CFLAGS $APU_CFLAGS"
|
||||
APACHE_CFLAGS="$APACHE_CPPFLAGS -I$APXS_INCLUDEDIR $APR_CFLAGS $APU_CFLAGS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1"
|
||||
|
||||
# Test that we're trying to configure with apache 2.x
|
||||
PHP_AP_EXTRACT_VERSION($APXS_HTTPD)
|
||||
|
||||
@@ -13,7 +13,7 @@ if (PHP_APACHE2HANDLER != "no") {
|
||||
) {
|
||||
SAPI('apache2handler', 'mod_php7.c sapi_apache2.c apache_config.c php_functions.c',
|
||||
'php' + PHP_VERSION + 'apache2.dll',
|
||||
'/D PHP_APACHE2_EXPORTS /I win32');
|
||||
'/D PHP_APACHE2_EXPORTS /I win32 /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1');
|
||||
} else {
|
||||
WARNING("Could not find apache2 libraries/headers");
|
||||
}
|
||||
@@ -31,7 +31,7 @@ if (PHP_APACHE2_2HANDLER != "no") {
|
||||
) {
|
||||
SAPI('apache2_2handler', 'mod_php7.c sapi_apache2.c apache_config.c php_functions.c',
|
||||
'php' + PHP_VERSION + 'apache2_2.dll',
|
||||
'/D PHP_APACHE2_EXPORTS /I win32',
|
||||
'/D PHP_APACHE2_EXPORTS /I win32 /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1',
|
||||
'sapi\\apache2_2handler');
|
||||
} else {
|
||||
WARNING("Could not find apache2.2 libraries/headers");
|
||||
@@ -49,7 +49,7 @@ if (PHP_APACHE2_4HANDLER != "no") {
|
||||
) {
|
||||
SAPI('apache2_4handler', 'mod_php7.c sapi_apache2.c apache_config.c php_functions.c',
|
||||
'php' + PHP_VERSION + 'apache2_4.dll',
|
||||
'/D PHP_APACHE2_EXPORTS /I win32',
|
||||
'/D PHP_APACHE2_EXPORTS /I win32 /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1',
|
||||
'sapi\\apache2handler');
|
||||
} else {
|
||||
WARNING("Could not find apache 2.4 libraries/headers");
|
||||
|
||||
@@ -79,7 +79,8 @@ extern zend_module_entry apache2_module_entry;
|
||||
|
||||
#ifdef ZTS
|
||||
extern int php_apache2_info_id;
|
||||
#define AP2(v) TSRMG(php_apache2_info_id, php_apache2_info_struct *, v)
|
||||
#define AP2(v) ZEND_TSRMG(php_apache2_info_id, php_apache2_info_struct *, v)
|
||||
ZEND_TSRMLS_CACHE_EXTERN;
|
||||
#else
|
||||
extern php_apache2_info_struct php_apache2_info;
|
||||
#define AP2(v) (php_apache2_info.v)
|
||||
|
||||
@@ -71,6 +71,9 @@
|
||||
|
||||
/* A way to specify the location of the php.ini dir in an apache directive */
|
||||
char *apache2_php_ini_path_override = NULL;
|
||||
#ifdef ZTS
|
||||
ZEND_TSRMLS_CACHE_DEFINE;
|
||||
#endif
|
||||
|
||||
static size_t
|
||||
php_apache_sapi_ub_write(const char *str, size_t str_length TSRMLS_DC)
|
||||
@@ -451,6 +454,8 @@ php_apache_server_startup(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp
|
||||
}
|
||||
#ifdef ZTS
|
||||
tsrm_startup(1, 1, 0, NULL);
|
||||
(void)ts_resource(0);
|
||||
ZEND_TSRMLS_CACHE_UPDATE;
|
||||
#endif
|
||||
sapi_startup(&apache2_sapi_module);
|
||||
apache2_sapi_module.startup(&apache2_sapi_module);
|
||||
@@ -543,6 +548,7 @@ static int php_handler(request_rec *r)
|
||||
#ifdef ZTS
|
||||
/* initial resource fetch */
|
||||
void ***tsrm_ls = ts_resource(0);
|
||||
ZEND_TSRMLS_CACHE_UPDATE;
|
||||
#endif
|
||||
|
||||
#define PHPAP_INI_OFF php_apache_ini_dtor(r, parent_req TSRMLS_CC);
|
||||
|
||||
@@ -198,7 +198,8 @@ static void user_config_cache_entry_dtor(zval *el)
|
||||
|
||||
#ifdef ZTS
|
||||
static int php_cgi_globals_id;
|
||||
#define CGIG(v) TSRMG(php_cgi_globals_id, php_cgi_globals_struct *, v)
|
||||
#define CGIG(v) ZEND_TSRMG(php_cgi_globals_id, php_cgi_globals_struct *, v)
|
||||
ZEND_TSRMLS_CACHE_DEFINE;
|
||||
#else
|
||||
static php_cgi_globals_struct php_cgi_globals;
|
||||
#define CGIG(v) (php_cgi_globals.v)
|
||||
@@ -1471,6 +1472,9 @@ PHP_INI_END()
|
||||
*/
|
||||
static void php_cgi_globals_ctor(php_cgi_globals_struct *php_cgi_globals TSRMLS_DC)
|
||||
{
|
||||
#ifdef ZTS
|
||||
ZEND_TSRMLS_CACHE_UPDATE;
|
||||
#endif
|
||||
php_cgi_globals->rfc2616_headers = 0;
|
||||
php_cgi_globals->nph = 0;
|
||||
php_cgi_globals->check_shebang_line = 1;
|
||||
@@ -1795,6 +1799,7 @@ int main(int argc, char *argv[])
|
||||
#ifdef ZTS
|
||||
tsrm_startup(1, 1, 0, NULL);
|
||||
tsrm_ls = ts_resource(0);
|
||||
ZEND_TSRMLS_CACHE_UPDATE;
|
||||
#endif
|
||||
|
||||
sapi_startup(&cgi_sapi_module);
|
||||
|
||||
@@ -5,6 +5,6 @@ ARG_ENABLE('cgi', 'Build CGI version of PHP', 'yes');
|
||||
|
||||
if (PHP_CGI == "yes") {
|
||||
ADD_FLAG("LDFLAGS_CGI", "/stack:67108864");
|
||||
SAPI('cgi', 'cgi_main.c fastcgi.c', 'php-cgi.exe');
|
||||
SAPI('cgi', 'cgi_main.c fastcgi.c', 'php-cgi.exe', '/DZEND_ENABLE_STATIC_TSRMLS_CACHE=1');
|
||||
ADD_FLAG('LIBS_CGI', 'ws2_32.lib kernel32.lib advapi32.lib');
|
||||
}
|
||||
|
||||
@@ -50,7 +50,7 @@ if test "$PHP_CGI" != "no"; then
|
||||
esac
|
||||
|
||||
dnl Select SAPI
|
||||
PHP_SELECT_SAPI(cgi, program, cgi_main.c fastcgi.c,, '$(SAPI_CGI_PATH)')
|
||||
PHP_SELECT_SAPI(cgi, program, cgi_main.c fastcgi.c, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1, '$(SAPI_CGI_PATH)')
|
||||
|
||||
case $host_alias in
|
||||
*aix*)
|
||||
|
||||
@@ -31,7 +31,7 @@ if test "$PHP_CLI" != "no"; then
|
||||
SAPI_CLI_PATH=sapi/cli/php
|
||||
|
||||
dnl Select SAPI
|
||||
PHP_SELECT_SAPI(cli, program, php_cli.c php_http_parser.c php_cli_server.c ps_title.c php_cli_process_title.c,, '$(SAPI_CLI_PATH)')
|
||||
PHP_SELECT_SAPI(cli, program, php_cli.c php_http_parser.c php_cli_server.c ps_title.c php_cli_process_title.c, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1, '$(SAPI_CLI_PATH)')
|
||||
|
||||
case $host_alias in
|
||||
*aix*)
|
||||
|
||||
@@ -6,7 +6,7 @@ ARG_ENABLE('crt-debug', 'Enable CRT memory dumps for debugging sent to STDERR',
|
||||
ARG_ENABLE('cli-win32', 'Build console-less CLI version of PHP', 'no');
|
||||
|
||||
if (PHP_CLI == "yes") {
|
||||
SAPI('cli', 'php_cli.c php_http_parser.c php_cli_server.c php_cli_process_title.c ps_title.c', 'php.exe');
|
||||
SAPI('cli', 'php_cli.c php_http_parser.c php_cli_server.c php_cli_process_title.c ps_title.c', 'php.exe', '/DZEND_ENABLE_STATIC_TSRMLS_CACHE=1');
|
||||
ADD_FLAG("LIBS_CLI", "ws2_32.lib");
|
||||
if (PHP_CRT_DEBUG == "yes") {
|
||||
ADD_FLAG("CFLAGS_CLI", "/D PHP_WIN32_DEBUG_HEAP");
|
||||
@@ -15,7 +15,7 @@ if (PHP_CLI == "yes") {
|
||||
}
|
||||
|
||||
if (PHP_CLI_WIN32 == "yes") {
|
||||
SAPI('cli_win32', 'cli_win32.c php_cli_process_title.c ps_title.c', 'php-win.exe');
|
||||
SAPI('cli_win32', 'cli_win32.c php_cli_process_title.c ps_title.c', 'php-win.exe', '/DZEND_ENABLE_STATIC_TSRMLS_CACHE=1');
|
||||
ADD_FLAG("LDFLAGS_CLI_WIN32", "/stack:67108864");
|
||||
}
|
||||
|
||||
|
||||
@@ -99,6 +99,10 @@ PHPAPI extern char *php_ini_opened_path;
|
||||
PHPAPI extern char *php_ini_scanned_path;
|
||||
PHPAPI extern char *php_ini_scanned_files;
|
||||
|
||||
#ifdef ZTS
|
||||
ZEND_TSRMLS_CACHE_DEFINE;
|
||||
#endif
|
||||
|
||||
#ifndef O_BINARY
|
||||
#define O_BINARY 0
|
||||
#endif
|
||||
@@ -1236,6 +1240,7 @@ int main(int argc, char *argv[])
|
||||
#ifdef ZTS
|
||||
tsrm_startup(1, 1, 0, NULL);
|
||||
tsrm_ls = ts_resource(0);
|
||||
ZEND_TSRMLS_CACHE_UPDATE;
|
||||
#endif
|
||||
|
||||
#ifdef PHP_WIN32
|
||||
|
||||
@@ -1348,6 +1348,9 @@ out:
|
||||
|
||||
static int php_cli_server_request_ctor(php_cli_server_request *req) /* {{{ */
|
||||
{
|
||||
#ifdef ZTS
|
||||
ZEND_TSRMLS_CACHE_UPDATE;
|
||||
#endif
|
||||
req->protocol_version = 0;
|
||||
req->request_uri = NULL;
|
||||
req->request_uri_len = 0;
|
||||
|
||||
@@ -32,7 +32,8 @@ ZEND_BEGIN_MODULE_GLOBALS(cli_server)
|
||||
ZEND_END_MODULE_GLOBALS(cli_server)
|
||||
|
||||
#ifdef ZTS
|
||||
#define CLI_SERVER_G(v) TSRMG(cli_server_globals_id, zend_cli_server_globals *, v)
|
||||
#define CLI_SERVER_G(v) ZEND_TSRMG(cli_server_globals_id, zend_cli_server_globals *, v)
|
||||
ZEND_TSRMLS_CACHE_EXTERN;
|
||||
#else
|
||||
#define CLI_SERVER_G(v) (cli_server_globals.v)
|
||||
#endif
|
||||
|
||||
@@ -378,6 +378,7 @@ ADD_SOURCES("main", "main.c snprintf.c spprintf.c getopt.c fopen_wrappers.c \
|
||||
php_scandir.c php_ini.c SAPI.c rfc1867.c php_content_types.c strlcpy.c \
|
||||
strlcat.c mergesort.c reentrancy.c php_variables.c php_ticks.c network.c \
|
||||
php_open_temporary_file.c output.c internal_functions.c php_sprintf.c");
|
||||
ADD_FLAG("CFLAGS_BD_MAIN", "/D ZEND_ENABLE_STATIC_TSRMLS_CACHE=1");
|
||||
ADD_SOURCES("win32", "inet.c fnmatch.c sockets.c");
|
||||
|
||||
// Newer versions have it
|
||||
@@ -390,10 +391,13 @@ if (VCVERS >= 1400) {
|
||||
|
||||
ADD_SOURCES("main/streams", "streams.c cast.c memory.c filter.c plain_wrapper.c \
|
||||
userspace.c transports.c xp_socket.c mmap.c glob_wrapper.c");
|
||||
ADD_FLAG("CFLAGS_BD_MAIN_STREAMS", "/D ZEND_ENABLE_STATIC_TSRMLS_CACHE=1");
|
||||
|
||||
ADD_SOURCES("win32", "glob.c readdir.c \
|
||||
registry.c select.c sendmail.c time.c winutil.c wsyslog.c globals.c");
|
||||
|
||||
ADD_FLAG("CFLAGS_BD_WIN32", "/D ZEND_ENABLE_STATIC_TSRMLS_CACHE=1");
|
||||
|
||||
PHP_INSTALL_HEADERS("", "Zend/ TSRM/ main/ main/streams/ win32/");
|
||||
|
||||
STDOUT.WriteBlankLines(1);
|
||||
|
||||
Reference in New Issue
Block a user