summaryrefslogtreecommitdiff
path: root/Zend
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2019-03-14 03:01:01 +0300
committerDmitry Stogov <dmitry@zend.com>2019-03-14 03:01:01 +0300
commit9499484ed2f0377678b2b4d88573327ee0e4ce6d (patch)
tree2253189b70e711565902d2c372fe5d93ce111358 /Zend
parenta1b7bc0c8148eaf728fccdffe147e3bc0c03f18e (diff)
downloadphp-git-9499484ed2f0377678b2b4d88573327ee0e4ce6d.tar.gz
Implemented a faster way to access predefined TSRM resources - CG(), EG(), etc.
Diffstat (limited to 'Zend')
-rw-r--r--Zend/zend.c10
-rw-r--r--Zend/zend.h2
-rw-r--r--Zend/zend_alloc.c12
-rw-r--r--Zend/zend_alloc.h4
-rw-r--r--Zend/zend_gc.c12
-rw-r--r--Zend/zend_gc.h4
-rw-r--r--Zend/zend_globals.h2
-rw-r--r--Zend/zend_globals_macros.h10
-rw-r--r--Zend/zend_ini_scanner.l1
-rw-r--r--Zend/zend_language_scanner.l1
-rw-r--r--Zend/zend_signal.c3
-rw-r--r--Zend/zend_signal.h3
-rw-r--r--Zend/zend_virtual_cwd.c3
-rw-r--r--Zend/zend_virtual_cwd.h3
14 files changed, 54 insertions, 16 deletions
diff --git a/Zend/zend.c b/Zend/zend.c
index 542ac9ff1d..2c2bd09081 100644
--- a/Zend/zend.c
+++ b/Zend/zend.c
@@ -38,6 +38,8 @@ static size_t global_map_ptr_last = 0;
#ifdef ZTS
ZEND_API int compiler_globals_id;
ZEND_API int executor_globals_id;
+ZEND_API size_t compiler_globals_offset;
+ZEND_API size_t executor_globals_offset;
static HashTable *global_function_table = NULL;
static HashTable *global_class_table = NULL;
static HashTable *global_constants_table = NULL;
@@ -868,10 +870,10 @@ int zend_startup(zend_utility_functions *utility_functions) /* {{{ */
zend_init_rsrc_list_dtors();
#ifdef ZTS
- ts_allocate_id(&compiler_globals_id, sizeof(zend_compiler_globals), (ts_allocate_ctor) compiler_globals_ctor, (ts_allocate_dtor) compiler_globals_dtor);
- ts_allocate_id(&executor_globals_id, sizeof(zend_executor_globals), (ts_allocate_ctor) executor_globals_ctor, (ts_allocate_dtor) executor_globals_dtor);
- ts_allocate_id(&language_scanner_globals_id, sizeof(zend_php_scanner_globals), (ts_allocate_ctor) php_scanner_globals_ctor, NULL);
- ts_allocate_id(&ini_scanner_globals_id, sizeof(zend_ini_scanner_globals), (ts_allocate_ctor) ini_scanner_globals_ctor, NULL);
+ ts_allocate_fast_id(&compiler_globals_id, &compiler_globals_offset, sizeof(zend_compiler_globals), (ts_allocate_ctor) compiler_globals_ctor, (ts_allocate_dtor) compiler_globals_dtor);
+ ts_allocate_fast_id(&executor_globals_id, &executor_globals_offset, sizeof(zend_executor_globals), (ts_allocate_ctor) executor_globals_ctor, (ts_allocate_dtor) executor_globals_dtor);
+ ts_allocate_fast_id(&language_scanner_globals_id, &language_scanner_globals_offset, sizeof(zend_php_scanner_globals), (ts_allocate_ctor) php_scanner_globals_ctor, NULL);
+ ts_allocate_fast_id(&ini_scanner_globals_id, &ini_scanner_globals_offset, sizeof(zend_ini_scanner_globals), (ts_allocate_ctor) ini_scanner_globals_ctor, NULL);
compiler_globals = ts_resource(compiler_globals_id);
executor_globals = ts_resource(executor_globals_id);
diff --git a/Zend/zend.h b/Zend/zend.h
index 4839b994b9..73a56a0ccb 100644
--- a/Zend/zend.h
+++ b/Zend/zend.h
@@ -55,12 +55,14 @@
#ifdef ZEND_ENABLE_STATIC_TSRMLS_CACHE
#define ZEND_TSRMG TSRMG_STATIC
+#define ZEND_TSRMG_FAST TSRMG_FAST_STATIC
#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_TSRMG_FAST TSRMG_FAST
#define ZEND_TSRMLS_CACHE_EXTERN()
#define ZEND_TSRMLS_CACHE_DEFINE()
#define ZEND_TSRMLS_CACHE_UPDATE()
diff --git a/Zend/zend_alloc.c b/Zend/zend_alloc.c
index 27879dae03..dabf48150c 100644
--- a/Zend/zend_alloc.c
+++ b/Zend/zend_alloc.c
@@ -2371,7 +2371,8 @@ typedef struct _zend_alloc_globals {
#ifdef ZTS
static int alloc_globals_id;
-# define AG(v) ZEND_TSRMG(alloc_globals_id, zend_alloc_globals *, v)
+static size_t alloc_globals_offset;
+# define AG(v) ZEND_TSRMG_FAST(alloc_globals_offset, zend_alloc_globals *, v)
#else
# define AG(v) (alloc_globals.v)
static zend_alloc_globals alloc_globals;
@@ -2736,7 +2737,7 @@ static void alloc_globals_dtor(zend_alloc_globals *alloc_globals)
ZEND_API void start_memory_manager(void)
{
#ifdef ZTS
- ts_allocate_id(&alloc_globals_id, sizeof(zend_alloc_globals), (ts_allocate_ctor) alloc_globals_ctor, (ts_allocate_dtor) alloc_globals_dtor);
+ ts_allocate_fast_id(&alloc_globals_id, &alloc_globals_offset, sizeof(zend_alloc_globals), (ts_allocate_ctor) alloc_globals_ctor, (ts_allocate_dtor) alloc_globals_dtor);
#else
alloc_globals_ctor(&alloc_globals);
#endif
@@ -2958,3 +2959,10 @@ ZEND_API void * __zend_realloc(void *p, size_t len)
}
zend_out_of_memory();
}
+
+#ifdef ZTS
+size_t zend_mm_globals_size(void)
+{
+ return sizeof(zend_alloc_globals);
+}
+#endif
diff --git a/Zend/zend_alloc.h b/Zend/zend_alloc.h
index abe6ec8e12..075aac6561 100644
--- a/Zend/zend_alloc.h
+++ b/Zend/zend_alloc.h
@@ -398,6 +398,10 @@ static void apc_init_heap(void)
*/
+#ifdef ZTS
+size_t zend_mm_globals_size(void);
+#endif
+
END_EXTERN_C()
#endif
diff --git a/Zend/zend_gc.c b/Zend/zend_gc.c
index bc1fa4b82f..edb952c2cd 100644
--- a/Zend/zend_gc.c
+++ b/Zend/zend_gc.c
@@ -211,7 +211,8 @@ typedef struct _zend_gc_globals {
#ifdef ZTS
static int gc_globals_id;
-#define GC_G(v) ZEND_TSRMG(gc_globals_id, zend_gc_globals *, v)
+static size_t gc_globals_offset;
+#define GC_G(v) ZEND_TSRMG_FAST(gc_globals_offset, zend_gc_globals *, v)
#else
#define GC_G(v) (gc_globals.v)
static zend_gc_globals gc_globals;
@@ -442,7 +443,7 @@ static void gc_globals_ctor_ex(zend_gc_globals *gc_globals)
void gc_globals_ctor(void)
{
#ifdef ZTS
- ts_allocate_id(&gc_globals_id, sizeof(zend_gc_globals), (ts_allocate_ctor) gc_globals_ctor_ex, (ts_allocate_dtor) root_buffer_dtor);
+ ts_allocate_fast_id(&gc_globals_id, &gc_globals_offset, sizeof(zend_gc_globals), (ts_allocate_ctor) gc_globals_ctor_ex, (ts_allocate_dtor) root_buffer_dtor);
#else
gc_globals_ctor_ex(&gc_globals);
#endif
@@ -1585,3 +1586,10 @@ ZEND_API void zend_gc_get_status(zend_gc_status *status)
status->threshold = GC_G(gc_threshold);
status->num_roots = GC_G(num_roots);
}
+
+#ifdef ZTS
+size_t zend_gc_globals_size(void)
+{
+ return sizeof(zend_gc_globals);
+}
+#endif
diff --git a/Zend/zend_gc.h b/Zend/zend_gc.h
index 377bd4298a..e83e874e07 100644
--- a/Zend/zend_gc.h
+++ b/Zend/zend_gc.h
@@ -51,6 +51,10 @@ void gc_globals_ctor(void);
void gc_globals_dtor(void);
void gc_reset(void);
+#ifdef ZTS
+size_t zend_gc_globals_size(void);
+#endif
+
END_EXTERN_C()
#define GC_REMOVE_FROM_BUFFER(p) do { \
diff --git a/Zend/zend_globals.h b/Zend/zend_globals.h
index 2f46da0c2d..5a76862194 100644
--- a/Zend/zend_globals.h
+++ b/Zend/zend_globals.h
@@ -45,6 +45,8 @@
BEGIN_EXTERN_C()
ZEND_API extern int compiler_globals_id;
ZEND_API extern int executor_globals_id;
+ZEND_API extern size_t compiler_globals_offset;
+ZEND_API extern size_t executor_globals_offset;
END_EXTERN_C()
#endif
diff --git a/Zend/zend_globals_macros.h b/Zend/zend_globals_macros.h
index 18181a433e..59b3daca53 100644
--- a/Zend/zend_globals_macros.h
+++ b/Zend/zend_globals_macros.h
@@ -29,7 +29,7 @@ BEGIN_EXTERN_C()
/* Compiler */
#ifdef ZTS
-# define CG(v) ZEND_TSRMG(compiler_globals_id, zend_compiler_globals *, v)
+# define CG(v) ZEND_TSRMG_FAST(compiler_globals_offset, zend_compiler_globals *, v)
#else
# define CG(v) (compiler_globals.v)
extern ZEND_API struct _zend_compiler_globals compiler_globals;
@@ -39,7 +39,7 @@ ZEND_API int zendparse(void);
/* Executor */
#ifdef ZTS
-# define EG(v) ZEND_TSRMG(executor_globals_id, zend_executor_globals *, v)
+# define EG(v) ZEND_TSRMG_FAST(executor_globals_offset, zend_executor_globals *, v)
#else
# define EG(v) (executor_globals.v)
extern ZEND_API zend_executor_globals executor_globals;
@@ -47,8 +47,9 @@ extern ZEND_API zend_executor_globals executor_globals;
/* Language Scanner */
#ifdef ZTS
-# define LANG_SCNG(v) ZEND_TSRMG(language_scanner_globals_id, zend_php_scanner_globals *, v)
+# define LANG_SCNG(v) ZEND_TSRMG_FAST(language_scanner_globals_offset, zend_php_scanner_globals *, v)
extern ZEND_API ts_rsrc_id language_scanner_globals_id;
+extern ZEND_API size_t language_scanner_globals_offset;
#else
# define LANG_SCNG(v) (language_scanner_globals.v)
extern ZEND_API zend_php_scanner_globals language_scanner_globals;
@@ -57,8 +58,9 @@ extern ZEND_API zend_php_scanner_globals language_scanner_globals;
/* INI Scanner */
#ifdef ZTS
-# define INI_SCNG(v) ZEND_TSRMG(ini_scanner_globals_id, zend_ini_scanner_globals *, v)
+# define INI_SCNG(v) ZEND_TSRMG_FAST(ini_scanner_globals_offset, zend_ini_scanner_globals *, v)
extern ZEND_API ts_rsrc_id ini_scanner_globals_id;
+extern ZEND_API size_t ini_scanner_globals_offset;
#else
# define INI_SCNG(v) (ini_scanner_globals.v)
extern ZEND_API zend_ini_scanner_globals ini_scanner_globals;
diff --git a/Zend/zend_ini_scanner.l b/Zend/zend_ini_scanner.l
index 23a5a7f14c..f71f0b9193 100644
--- a/Zend/zend_ini_scanner.l
+++ b/Zend/zend_ini_scanner.l
@@ -104,6 +104,7 @@
#define SCNG INI_SCNG
#ifdef ZTS
ZEND_API ts_rsrc_id ini_scanner_globals_id;
+ZEND_API size_t ini_scanner_globals_offset;
#else
ZEND_API zend_ini_scanner_globals ini_scanner_globals;
#endif
diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l
index e93431de24..b1e25ebae5 100644
--- a/Zend/zend_language_scanner.l
+++ b/Zend/zend_language_scanner.l
@@ -85,6 +85,7 @@
#define SCNG LANG_SCNG
#ifdef ZTS
ZEND_API ts_rsrc_id language_scanner_globals_id;
+ZEND_API size_t language_scanner_globals_offset;
#else
ZEND_API zend_php_scanner_globals language_scanner_globals;
#endif
diff --git a/Zend/zend_signal.c b/Zend/zend_signal.c
index a0dccd5819..571d85f848 100644
--- a/Zend/zend_signal.c
+++ b/Zend/zend_signal.c
@@ -45,6 +45,7 @@
#ifdef ZTS
ZEND_API int zend_signal_globals_id;
+ZEND_API size_t zend_signal_globals_offset;
#else
ZEND_API zend_signal_globals_t zend_signal_globals;
#endif /* not ZTS */
@@ -403,7 +404,7 @@ ZEND_API void zend_signal_startup(void)
{
#ifdef ZTS
- ts_allocate_id(&zend_signal_globals_id, sizeof(zend_signal_globals_t), (ts_allocate_ctor) zend_signal_globals_ctor, NULL);
+ ts_allocate_fast_id(&zend_signal_globals_id, &zend_signal_globals_offset, sizeof(zend_signal_globals_t), (ts_allocate_ctor) zend_signal_globals_ctor, NULL);
#else
zend_signal_globals_ctor(&zend_signal_globals);
#endif
diff --git a/Zend/zend_signal.h b/Zend/zend_signal.h
index 7ecdde3cd6..1c234b0a0c 100644
--- a/Zend/zend_signal.h
+++ b/Zend/zend_signal.h
@@ -65,9 +65,10 @@ typedef struct _zend_signal_globals_t {
} zend_signal_globals_t;
# ifdef ZTS
-# define SIGG(v) ZEND_TSRMG(zend_signal_globals_id, zend_signal_globals_t *, v)
+# define SIGG(v) ZEND_TSRMG_FAST(zend_signal_globals_offset, zend_signal_globals_t *, v)
BEGIN_EXTERN_C()
ZEND_API extern int zend_signal_globals_id;
+ZEND_API extern size_t zend_signal_globals_offset;
END_EXTERN_C()
# else
# define SIGG(v) (zend_signal_globals.v)
diff --git a/Zend/zend_virtual_cwd.c b/Zend/zend_virtual_cwd.c
index 3998b46aa1..8f8514ba23 100644
--- a/Zend/zend_virtual_cwd.c
+++ b/Zend/zend_virtual_cwd.c
@@ -82,6 +82,7 @@ MUTEX_T cwd_mutex;
#ifdef ZTS
ts_rsrc_id cwd_globals_id;
+size_t cwd_globals_offset;
#else
virtual_cwd_globals cwd_globals;
#endif
@@ -185,7 +186,7 @@ CWD_API void virtual_cwd_startup(void) /* {{{ */
{
virtual_cwd_main_cwd_init(0);
#ifdef ZTS
- ts_allocate_id(&cwd_globals_id, sizeof(virtual_cwd_globals), (ts_allocate_ctor) cwd_globals_ctor, (ts_allocate_dtor) cwd_globals_dtor);
+ ts_allocate_fast_id(&cwd_globals_id, &cwd_globals_offset, sizeof(virtual_cwd_globals), (ts_allocate_ctor) cwd_globals_ctor, (ts_allocate_dtor) cwd_globals_dtor);
#else
cwd_globals_ctor(&cwd_globals);
#endif
diff --git a/Zend/zend_virtual_cwd.h b/Zend/zend_virtual_cwd.h
index c6c06f6332..dd8567cc51 100644
--- a/Zend/zend_virtual_cwd.h
+++ b/Zend/zend_virtual_cwd.h
@@ -212,7 +212,8 @@ typedef struct _virtual_cwd_globals {
#ifdef ZTS
extern ts_rsrc_id cwd_globals_id;
-# define CWDG(v) ZEND_TSRMG(cwd_globals_id, virtual_cwd_globals *, v)
+extern size_t cwd_globals_offset;
+# define CWDG(v) ZEND_TSRMG_FAST(cwd_globals_offset, virtual_cwd_globals *, v)
#else
extern virtual_cwd_globals cwd_globals;
# define CWDG(v) (cwd_globals.v)