@@ -204,6 +204,7 @@ static void zend_persist_zval(zval *z)
204
204
/* make immutable array */
205
205
Z_TYPE_FLAGS_P (z ) = IS_TYPE_IMMUTABLE ;
206
206
GC_REFCOUNT (Z_COUNTED_P (z )) = 2 ;
207
+ GC_FLAGS (Z_COUNTED_P (z )) |= IS_ARRAY_IMMUTABLE ;
207
208
Z_ARRVAL_P (z )-> u .flags &= ~HASH_FLAG_APPLY_PROTECTION ;
208
209
}
209
210
}
@@ -258,6 +259,7 @@ static void zend_persist_zval_const(zval *z)
258
259
/* make immutable array */
259
260
Z_TYPE_FLAGS_P (z ) = IS_TYPE_IMMUTABLE ;
260
261
GC_REFCOUNT (Z_COUNTED_P (z )) = 2 ;
262
+ GC_FLAGS (Z_COUNTED_P (z )) |= IS_ARRAY_IMMUTABLE ;
261
263
Z_ARRVAL_P (z )-> u .flags &= ~HASH_FLAG_APPLY_PROTECTION ;
262
264
}
263
265
}
@@ -278,6 +280,8 @@ static void zend_persist_zval_const(zval *z)
278
280
} else {
279
281
zend_accel_store (Z_AST_P (z ), sizeof (zend_ast_ref ));
280
282
Z_ASTVAL_P (z ) = zend_persist_ast (Z_ASTVAL_P (z ));
283
+ Z_TYPE_FLAGS_P (z ) = IS_TYPE_CONSTANT | IS_TYPE_IMMUTABLE ;
284
+ GC_REFCOUNT (Z_COUNTED_P (z )) = 2 ;
281
285
}
282
286
break ;
283
287
}
@@ -313,8 +317,18 @@ static void zend_persist_op_array_ex(zend_op_array *op_array, zend_persistent_sc
313
317
}
314
318
315
319
if (op_array -> static_variables ) {
316
- zend_hash_persist (op_array -> static_variables , zend_persist_zval );
317
- zend_accel_store (op_array -> static_variables , sizeof (HashTable ));
320
+ HashTable * stored = zend_shared_alloc_get_xlat_entry (op_array -> static_variables );
321
+
322
+ if (stored ) {
323
+ op_array -> static_variables = stored ;
324
+ } else {
325
+ zend_hash_persist (op_array -> static_variables , zend_persist_zval_const );
326
+ zend_accel_store (op_array -> static_variables , sizeof (HashTable ));
327
+ /* make immutable array */
328
+ GC_REFCOUNT (op_array -> static_variables ) = 2 ;
329
+ GC_TYPE_INFO (op_array -> static_variables ) = IS_ARRAY | (IS_ARRAY_IMMUTABLE << 8 );
330
+ op_array -> static_variables -> u .flags &= ~HASH_FLAG_APPLY_PROTECTION ;
331
+ }
318
332
}
319
333
320
334
if (zend_shared_alloc_get_xlat_entry (op_array -> opcodes )) {
0 commit comments