From 709e45d89b35f77d1cdc89f57a8150fc6c9b859c Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Wed, 17 Mar 2021 12:19:09 +0100 Subject: Avoid unnecessary static_variables persistence static_variables should be treated the same way as all other op_array components nowadays (only static_variables_ptr is special). There's no need to persist/serialize it is separately per shared op_array. --- ext/opcache/zend_file_cache.c | 38 ++++++++++++++++++++------------------ ext/opcache/zend_persist.c | 12 ++++++------ ext/opcache/zend_persist_calc.c | 12 ++++++------ 3 files changed, 32 insertions(+), 30 deletions(-) (limited to 'ext') diff --git a/ext/opcache/zend_file_cache.c b/ext/opcache/zend_file_cache.c index 1021992b3a..4c7611d36d 100644 --- a/ext/opcache/zend_file_cache.c +++ b/ext/opcache/zend_file_cache.c @@ -461,18 +461,10 @@ static void zend_file_cache_serialize_op_array(zend_op_array *op_arra return; } - if (op_array->static_variables) { - HashTable *ht; - - SERIALIZE_PTR(op_array->static_variables); - ht = op_array->static_variables; - UNSERIALIZE_PTR(ht); - zend_file_cache_serialize_hash(ht, script, info, buf, zend_file_cache_serialize_zval); - } - if (op_array->scope) { if (UNEXPECTED(zend_shared_alloc_get_xlat_entry(op_array->opcodes))) { op_array->refcount = (uint32_t*)(intptr_t)-1; + SERIALIZE_PTR(op_array->static_variables); SERIALIZE_PTR(op_array->literals); SERIALIZE_PTR(op_array->opcodes); SERIALIZE_PTR(op_array->arg_info); @@ -490,6 +482,15 @@ static void zend_file_cache_serialize_op_array(zend_op_array *op_arra zend_shared_alloc_register_xlat_entry(op_array->opcodes, op_array->opcodes); } + if (op_array->static_variables) { + HashTable *ht; + + SERIALIZE_PTR(op_array->static_variables); + ht = op_array->static_variables; + UNSERIALIZE_PTR(ht); + zend_file_cache_serialize_hash(ht, script, info, buf, zend_file_cache_serialize_zval); + } + if (op_array->literals) { zval *p, *end; @@ -1274,17 +1275,9 @@ static void zend_file_cache_unserialize_op_array(zend_op_array *op_arr return; } - if (op_array->static_variables) { - HashTable *ht; - - UNSERIALIZE_PTR(op_array->static_variables); - ht = op_array->static_variables; - zend_file_cache_unserialize_hash(ht, - script, buf, zend_file_cache_unserialize_zval, ZVAL_PTR_DTOR); - } - if (op_array->refcount) { op_array->refcount = NULL; + UNSERIALIZE_PTR(op_array->static_variables); UNSERIALIZE_PTR(op_array->literals); UNSERIALIZE_PTR(op_array->opcodes); UNSERIALIZE_PTR(op_array->arg_info); @@ -1300,6 +1293,15 @@ static void zend_file_cache_unserialize_op_array(zend_op_array *op_arr return; } + if (op_array->static_variables) { + HashTable *ht; + + UNSERIALIZE_PTR(op_array->static_variables); + ht = op_array->static_variables; + zend_file_cache_unserialize_hash(ht, + script, buf, zend_file_cache_unserialize_zval, ZVAL_PTR_DTOR); + } + if (op_array->literals) { zval *p, *end; diff --git a/ext/opcache/zend_persist.c b/ext/opcache/zend_persist.c index 1e41097901..7ede974618 100644 --- a/ext/opcache/zend_persist.c +++ b/ext/opcache/zend_persist.c @@ -480,6 +480,12 @@ static void zend_persist_op_array_ex(zend_op_array *op_array, zend_persistent_sc op_array->prototype = NULL; } + if (op_array->scope + && !(op_array->fn_flags & ZEND_ACC_CLOSURE) + && (op_array->scope->ce_flags & ZEND_ACC_CACHED)) { + return; + } + if (op_array->static_variables && !zend_accel_in_shm(op_array->static_variables)) { Bucket *p; @@ -495,12 +501,6 @@ static void zend_persist_op_array_ex(zend_op_array *op_array, zend_persistent_sc GC_TYPE_INFO(op_array->static_variables) = GC_ARRAY | ((IS_ARRAY_IMMUTABLE|GC_NOT_COLLECTABLE) << GC_FLAGS_SHIFT); } - if (op_array->scope - && !(op_array->fn_flags & ZEND_ACC_CLOSURE) - && (op_array->scope->ce_flags & ZEND_ACC_CACHED)) { - return; - } - if (op_array->literals) { zval *p, *end; diff --git a/ext/opcache/zend_persist_calc.c b/ext/opcache/zend_persist_calc.c index 092fcb0c67..ebd1c61358 100644 --- a/ext/opcache/zend_persist_calc.c +++ b/ext/opcache/zend_persist_calc.c @@ -203,6 +203,12 @@ static void zend_persist_op_array_calc_ex(zend_op_array *op_array) } } + if (op_array->scope + && !(op_array->fn_flags & ZEND_ACC_CLOSURE) + && (op_array->scope->ce_flags & ZEND_ACC_CACHED)) { + return; + } + if (op_array->static_variables && !zend_accel_in_shm(op_array->static_variables)) { if (!zend_shared_alloc_get_xlat_entry(op_array->static_variables)) { Bucket *p; @@ -218,12 +224,6 @@ static void zend_persist_op_array_calc_ex(zend_op_array *op_array) } } - if (op_array->scope - && !(op_array->fn_flags & ZEND_ACC_CLOSURE) - && (op_array->scope->ce_flags & ZEND_ACC_CACHED)) { - return; - } - if (op_array->literals) { zval *p = op_array->literals; zval *end = p + op_array->last_literal; -- cgit v1.2.1