From b3aebda9eaf55706af2e21178f229a171725a168 Mon Sep 17 00:00:00 2001 From: krakjoe Date: Sat, 20 Sep 2014 20:22:14 +0100 Subject: native tls initial patch --- main/SAPI.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'main/SAPI.h') diff --git a/main/SAPI.h b/main/SAPI.h index 79661371d9..4e2b4cd420 100644 --- a/main/SAPI.h +++ b/main/SAPI.h @@ -143,7 +143,7 @@ typedef struct _sapi_globals_struct { BEGIN_EXTERN_C() #ifdef ZTS # define SG(v) TSRMG(sapi_globals_id, sapi_globals_struct *, v) -SAPI_API extern int sapi_globals_id; +TSRMG_DH(sapi_globals_struct, sapi_globals_id); #else # define SG(v) (sapi_globals.v) extern SAPI_API sapi_globals_struct sapi_globals; -- cgit v1.2.1 From d11734b4b00f57de80d931ad1c522e00082443af Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Thu, 25 Sep 2014 18:48:27 +0200 Subject: reworked the patch, less new stuff but worky TLS is already used in TSRM, the way exporting the tsrm cache through a thread local variable is not portable. Additionally, the current patch suffers from bugs which are hard to find, but prevent it to be worky with apache. What is done here is mainly uses the idea from the RFC patch, but - __thread variable is removed - offset math and declarations are removed - extra macros and definitions are removed What is done merely is - use an inline function to access the tsrm cache. The function uses the portable tsrm_tls_get macro which is cheap - all the TSRM_* macros are set to placebo. Thus this opens the way remove them later Except that, the logic is old. TSRMLS_FETCH will have to be done once per thread, then tsrm_get_ls_cache() can be used. Things seeming to be worky are cli, cli server and apache. I also tried to enable bz2 shared and it has worked out of the box. The change is yet minimal diffing to the current master bus is a worky start, IMHO. Though will have to recheck the other previously done SAPIs - embed and cgi. The offsets can be added to the tsrm_resource_type struct, then it'll not be needed to declare them in the userspace. Even the "done" member type can be changed to int16 or smaller, then adding the offset as int16 will not change the struct size. As well on the todo might be removing the hashed storage, thread_id != thread_id and linked list logic in favour of the explicit TLS operations. --- main/SAPI.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'main/SAPI.h') diff --git a/main/SAPI.h b/main/SAPI.h index 4e2b4cd420..79661371d9 100644 --- a/main/SAPI.h +++ b/main/SAPI.h @@ -143,7 +143,7 @@ typedef struct _sapi_globals_struct { BEGIN_EXTERN_C() #ifdef ZTS # define SG(v) TSRMG(sapi_globals_id, sapi_globals_struct *, v) -TSRMG_DH(sapi_globals_struct, sapi_globals_id); +SAPI_API extern int sapi_globals_id; #else # define SG(v) (sapi_globals.v) extern SAPI_API sapi_globals_struct sapi_globals; -- cgit v1.2.1 From 2bddd58d32b0eac53d98132f28de24c8688a1a54 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Wed, 15 Oct 2014 18:23:41 +0200 Subject: move SG to use global tsrmls pointer --- main/SAPI.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'main/SAPI.h') diff --git a/main/SAPI.h b/main/SAPI.h index 79661371d9..c4eb86dea8 100644 --- a/main/SAPI.h +++ b/main/SAPI.h @@ -142,7 +142,7 @@ typedef struct _sapi_globals_struct { BEGIN_EXTERN_C() #ifdef ZTS -# define SG(v) TSRMG(sapi_globals_id, sapi_globals_struct *, v) +# define SG(v) ZEND_TSRMG(sapi_globals_id, sapi_globals_struct *, v) SAPI_API extern int sapi_globals_id; #else # define SG(v) (sapi_globals.v) -- cgit v1.2.1 From bdeb220f48825642f84cdbf3ff23a30613c92e86 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Sat, 13 Dec 2014 23:06:14 +0100 Subject: first shot remove TSRMLS_* things --- main/SAPI.h | 122 ++++++++++++++++++++++++++++++------------------------------ 1 file changed, 61 insertions(+), 61 deletions(-) (limited to 'main/SAPI.h') diff --git a/main/SAPI.h b/main/SAPI.h index c4eb86dea8..bb523604bd 100644 --- a/main/SAPI.h +++ b/main/SAPI.h @@ -151,9 +151,9 @@ extern SAPI_API sapi_globals_struct sapi_globals; SAPI_API void sapi_startup(sapi_module_struct *sf); SAPI_API void sapi_shutdown(void); -SAPI_API void sapi_activate(TSRMLS_D); -SAPI_API void sapi_deactivate(TSRMLS_D); -SAPI_API void sapi_initialize_empty_request(TSRMLS_D); +SAPI_API void sapi_activate(void); +SAPI_API void sapi_deactivate(void); +SAPI_API void sapi_initialize_empty_request(void); END_EXTERN_C() /* @@ -182,40 +182,40 @@ typedef enum { /* Parameter: */ } sapi_header_op_enum; BEGIN_EXTERN_C() -SAPI_API int sapi_header_op(sapi_header_op_enum op, void *arg TSRMLS_DC); +SAPI_API int sapi_header_op(sapi_header_op_enum op, void *arg); /* Deprecated functions. Use sapi_header_op instead. */ -SAPI_API int sapi_add_header_ex(char *header_line, uint header_line_len, zend_bool duplicate, zend_bool replace TSRMLS_DC); -#define sapi_add_header(a, b, c) sapi_add_header_ex((a),(b),(c),1 TSRMLS_CC) +SAPI_API int sapi_add_header_ex(char *header_line, uint header_line_len, zend_bool duplicate, zend_bool replace); +#define sapi_add_header(a, b, c) sapi_add_header_ex((a),(b),(c),1) -SAPI_API int sapi_send_headers(TSRMLS_D); +SAPI_API int sapi_send_headers(void); SAPI_API void sapi_free_header(sapi_header_struct *sapi_header); -SAPI_API void sapi_handle_post(void *arg TSRMLS_DC); -SAPI_API int sapi_read_post_block(char *buffer, size_t buflen TSRMLS_DC); -SAPI_API int sapi_register_post_entries(sapi_post_entry *post_entry TSRMLS_DC); -SAPI_API int sapi_register_post_entry(sapi_post_entry *post_entry TSRMLS_DC); -SAPI_API void sapi_unregister_post_entry(sapi_post_entry *post_entry TSRMLS_DC); -SAPI_API int sapi_register_default_post_reader(void (*default_post_reader)(TSRMLS_D) TSRMLS_DC); -SAPI_API int sapi_register_treat_data(void (*treat_data)(int arg, char *str, zval *destArray TSRMLS_DC) TSRMLS_DC); -SAPI_API int sapi_register_input_filter(unsigned int (*input_filter)(int arg, char *var, char **val, size_t val_len, size_t *new_val_len TSRMLS_DC), unsigned int (*input_filter_init)(TSRMLS_D) TSRMLS_DC); - -SAPI_API int sapi_flush(TSRMLS_D); -SAPI_API zend_stat_t *sapi_get_stat(TSRMLS_D); -SAPI_API char *sapi_getenv(char *name, size_t name_len TSRMLS_DC); - -SAPI_API char *sapi_get_default_content_type(TSRMLS_D); -SAPI_API void sapi_get_default_content_type_header(sapi_header_struct *default_header TSRMLS_DC); -SAPI_API size_t sapi_apply_default_charset(char **mimetype, size_t len TSRMLS_DC); -SAPI_API void sapi_activate_headers_only(TSRMLS_D); - -SAPI_API int sapi_get_fd(int *fd TSRMLS_DC); -SAPI_API int sapi_force_http_10(TSRMLS_D); - -SAPI_API int sapi_get_target_uid(uid_t * TSRMLS_DC); -SAPI_API int sapi_get_target_gid(gid_t * TSRMLS_DC); -SAPI_API double sapi_get_request_time(TSRMLS_D); -SAPI_API void sapi_terminate_process(TSRMLS_D); +SAPI_API void sapi_handle_post(void *arg); +SAPI_API int sapi_read_post_block(char *buffer, size_t buflen); +SAPI_API int sapi_register_post_entries(sapi_post_entry *post_entry); +SAPI_API int sapi_register_post_entry(sapi_post_entry *post_entry); +SAPI_API void sapi_unregister_post_entry(sapi_post_entry *post_entry); +SAPI_API int sapi_register_default_post_reader(void (*default_post_reader)(void)); +SAPI_API int sapi_register_treat_data(void (*treat_data)(int arg, char *str, zval *destArray)); +SAPI_API int sapi_register_input_filter(unsigned int (*input_filter)(int arg, char *var, char **val, size_t val_len, size_t *new_val_len), unsigned int (*input_filter_init)(void)); + +SAPI_API int sapi_flush(void); +SAPI_API zend_stat_t *sapi_get_stat(void); +SAPI_API char *sapi_getenv(char *name, size_t name_len); + +SAPI_API char *sapi_get_default_content_type(void); +SAPI_API void sapi_get_default_content_type_header(sapi_header_struct *default_header); +SAPI_API size_t sapi_apply_default_charset(char **mimetype, size_t len); +SAPI_API void sapi_activate_headers_only(void); + +SAPI_API int sapi_get_fd(int *fd); +SAPI_API int sapi_force_http_10(void); + +SAPI_API int sapi_get_target_uid(uid_t *); +SAPI_API int sapi_get_target_gid(gid_t *); +SAPI_API double sapi_get_request_time(void); +SAPI_API void sapi_terminate_process(void); END_EXTERN_C() struct _sapi_module_struct { @@ -225,63 +225,63 @@ struct _sapi_module_struct { int (*startup)(struct _sapi_module_struct *sapi_module); int (*shutdown)(struct _sapi_module_struct *sapi_module); - int (*activate)(TSRMLS_D); - int (*deactivate)(TSRMLS_D); + int (*activate)(void); + int (*deactivate)(void); - size_t (*ub_write)(const char *str, size_t str_length TSRMLS_DC); - void (*flush)(void *server_context TSRMLS_DC); - zend_stat_t *(*get_stat)(TSRMLS_D); - char *(*getenv)(char *name, size_t name_len TSRMLS_DC); + size_t (*ub_write)(const char *str, size_t str_length); + void (*flush)(void *server_context); + zend_stat_t *(*get_stat)(void); + char *(*getenv)(char *name, size_t name_len); void (*sapi_error)(int type, const char *error_msg, ...); - int (*header_handler)(sapi_header_struct *sapi_header, sapi_header_op_enum op, sapi_headers_struct *sapi_headers TSRMLS_DC); - int (*send_headers)(sapi_headers_struct *sapi_headers TSRMLS_DC); - void (*send_header)(sapi_header_struct *sapi_header, void *server_context TSRMLS_DC); + int (*header_handler)(sapi_header_struct *sapi_header, sapi_header_op_enum op, sapi_headers_struct *sapi_headers); + int (*send_headers)(sapi_headers_struct *sapi_headers); + void (*send_header)(sapi_header_struct *sapi_header, void *server_context); - size_t (*read_post)(char *buffer, size_t count_bytes TSRMLS_DC); - char *(*read_cookies)(TSRMLS_D); + size_t (*read_post)(char *buffer, size_t count_bytes); + char *(*read_cookies)(void); - void (*register_server_variables)(zval *track_vars_array TSRMLS_DC); - void (*log_message)(char *message TSRMLS_DC); - double (*get_request_time)(TSRMLS_D); - void (*terminate_process)(TSRMLS_D); + void (*register_server_variables)(zval *track_vars_array); + void (*log_message)(char *message); + double (*get_request_time)(void); + void (*terminate_process)(void); char *php_ini_path_override; void (*block_interruptions)(void); void (*unblock_interruptions)(void); - void (*default_post_reader)(TSRMLS_D); - void (*treat_data)(int arg, char *str, zval *destArray TSRMLS_DC); + void (*default_post_reader)(void); + void (*treat_data)(int arg, char *str, zval *destArray); char *executable_location; int php_ini_ignore; int php_ini_ignore_cwd; /* don't look for php.ini in the current directory */ - int (*get_fd)(int *fd TSRMLS_DC); + int (*get_fd)(int *fd); - int (*force_http_10)(TSRMLS_D); + int (*force_http_10)(void); - int (*get_target_uid)(uid_t * TSRMLS_DC); - int (*get_target_gid)(gid_t * TSRMLS_DC); + int (*get_target_uid)(uid_t *); + int (*get_target_gid)(gid_t *); - unsigned int (*input_filter)(int arg, char *var, char **val, size_t val_len, size_t *new_val_len TSRMLS_DC); + unsigned int (*input_filter)(int arg, char *var, char **val, size_t val_len, size_t *new_val_len); void (*ini_defaults)(HashTable *configuration_hash); int phpinfo_as_text; char *ini_entries; const zend_function_entry *additional_functions; - unsigned int (*input_filter_init)(TSRMLS_D); + unsigned int (*input_filter_init)(void); }; struct _sapi_post_entry { char *content_type; uint content_type_len; - void (*post_reader)(TSRMLS_D); - void (*post_handler)(char *content_type_dup, void *arg TSRMLS_DC); + void (*post_reader)(void); + void (*post_handler)(char *content_type_dup, void *arg); }; /* header_handler() constants */ @@ -296,11 +296,11 @@ struct _sapi_post_entry { #define SAPI_DEFAULT_CHARSET PHP_DEFAULT_CHARSET #define SAPI_PHP_VERSION_HEADER "X-Powered-By: PHP/" PHP_VERSION -#define SAPI_POST_READER_FUNC(post_reader) void post_reader(TSRMLS_D) -#define SAPI_POST_HANDLER_FUNC(post_handler) void post_handler(char *content_type_dup, void *arg TSRMLS_DC) +#define SAPI_POST_READER_FUNC(post_reader) void post_reader(void) +#define SAPI_POST_HANDLER_FUNC(post_handler) void post_handler(char *content_type_dup, void *arg) -#define SAPI_TREAT_DATA_FUNC(treat_data) void treat_data(int arg, char *str, zval* destArray TSRMLS_DC) -#define SAPI_INPUT_FILTER_FUNC(input_filter) unsigned int input_filter(int arg, char *var, char **val, size_t val_len, size_t *new_val_len TSRMLS_DC) +#define SAPI_TREAT_DATA_FUNC(treat_data) void treat_data(int arg, char *str, zval* destArray) +#define SAPI_INPUT_FILTER_FUNC(input_filter) unsigned int input_filter(int arg, char *var, char **val, size_t val_len, size_t *new_val_len) BEGIN_EXTERN_C() SAPI_API SAPI_POST_READER_FUNC(sapi_read_standard_form_data); -- cgit v1.2.1