summaryrefslogtreecommitdiff
path: root/Zend/zend_gc.c
diff options
context:
space:
mode:
Diffstat (limited to 'Zend/zend_gc.c')
-rw-r--r--Zend/zend_gc.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/Zend/zend_gc.c b/Zend/zend_gc.c
index f999a4dd10..a5880933b7 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
@@ -1575,3 +1576,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