@@ -42,22 +42,26 @@ static void _str_dtor(zval *zv)
42
42
}
43
43
#endif
44
44
45
+ /* Readonly, so assigned also per thread. */
46
+ static const zend_string * * known_interned_strings = NULL ;
47
+ static uint32_t known_interned_strings_count = 0 ;
48
+
45
49
ZEND_API uint32_t zend_intern_known_strings (const char * * strings , uint32_t count )
46
50
{
47
- uint32_t i , old_count = CG ( known_strings_count ) ;
51
+ uint32_t i , old_count = known_interned_strings_count ;
48
52
49
- CG ( known_strings ) = perealloc (CG ( known_strings ) , sizeof (char * ) * (old_count + count ), 1 );
53
+ known_interned_strings = perealloc (known_interned_strings , sizeof (char * ) * (old_count + count ), 1 );
50
54
for (i = 0 ; i < count ; i ++ ) {
51
55
#ifndef ZTS
52
56
zend_string * str = zend_string_init (strings [i ], strlen (strings [i ]), 1 );
53
- CG ( known_strings )[ CG ( known_strings_count ) + i ] =
57
+ known_interned_strings [ known_interned_strings_count + i ] =
54
58
zend_new_interned_string_int (str );
55
59
#else
56
- CG ( known_strings )[ CG ( known_strings_count ) + i ] =
60
+ known_interned_strings [ known_interned_strings_count + i ] =
57
61
zend_zts_interned_string_init (strings [i ], strlen (strings [i ]));
58
62
#endif
59
63
}
60
- CG ( known_strings_count ) = old_count + count ;
64
+ known_interned_strings_count = old_count + count ;
61
65
return old_count ;
62
66
}
63
67
@@ -68,6 +72,12 @@ ZEND_KNOWN_STRINGS(_ZEND_STR_DSC)
68
72
NULL
69
73
};
70
74
75
+ void zend_known_interned_strings_init (zend_string * * * strings , uint32_t * count )
76
+ {
77
+ * strings = known_interned_strings ;
78
+ * count = known_interned_strings_count ;
79
+ }
80
+
71
81
void zend_interned_strings_init (void )
72
82
{
73
83
#ifndef ZTS
@@ -90,9 +100,8 @@ void zend_interned_strings_init(void)
90
100
memset (CG (one_char_string ), 0 , sizeof (CG (one_char_string )));
91
101
92
102
/* known strings */
93
- CG (known_strings ) = NULL ;
94
- CG (known_strings_count ) = 0 ;
95
103
zend_intern_known_strings (known_strings , (sizeof (known_strings ) / sizeof (known_strings [0 ])) - 1 );
104
+ zend_known_interned_strings_init (& CG (known_strings ), & CG (known_strings_count ));
96
105
97
106
zend_new_interned_string = zend_new_interned_string_int ;
98
107
zend_interned_strings_snapshot = zend_interned_strings_snapshot_int ;
0 commit comments