summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2021-03-17 12:19:09 +0100
committerNikita Popov <nikita.ppv@gmail.com>2021-03-17 12:20:58 +0100
commit709e45d89b35f77d1cdc89f57a8150fc6c9b859c (patch)
treef88de7872274afa84b543e32e4b493a99d68e606 /ext
parent994d4199d558aefbdca09394541164106e8abc28 (diff)
downloadphp-git-709e45d89b35f77d1cdc89f57a8150fc6c9b859c.tar.gz
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.
Diffstat (limited to 'ext')
-rw-r--r--ext/opcache/zend_file_cache.c38
-rw-r--r--ext/opcache/zend_persist.c12
-rw-r--r--ext/opcache/zend_persist_calc.c12
3 files changed, 32 insertions, 30 deletions
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;