From 15f713bd850977f1650b9e902b6ecfe1ac818a13 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Mon, 15 Feb 2021 12:33:53 +0300 Subject: [PATCH] Persist class name before methods, because it may be used insted of "self" --- ext/opcache/zend_persist.c | 12 +++++++----- ext/opcache/zend_persist_calc.c | 12 +++++++----- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/ext/opcache/zend_persist.c b/ext/opcache/zend_persist.c index e5aad26133..ea6fa096b6 100644 --- a/ext/opcache/zend_persist.c +++ b/ext/opcache/zend_persist.c @@ -846,6 +846,13 @@ zend_class_entry *zend_persist_class_entry(zend_class_entry *orig_ce) } ce->inheritance_cache = NULL; + if (!(ce->ce_flags & ZEND_ACC_CACHED)) { + zend_accel_store_interned_string(ce->name); + if (ce->parent_name && !(ce->ce_flags & ZEND_ACC_LINKED)) { + zend_accel_store_interned_string(ce->parent_name); + } + } + zend_hash_persist(&ce->function_table); ZEND_HASH_FOREACH_BUCKET(&ce->function_table, p) { ZEND_ASSERT(p->key != NULL); @@ -950,11 +957,6 @@ zend_class_entry *zend_persist_class_entry(zend_class_entry *orig_ce) ce->ce_flags |= ZEND_ACC_CACHED; - zend_accel_store_interned_string(ce->name); - if (ce->parent_name && !(ce->ce_flags & ZEND_ACC_LINKED)) { - zend_accel_store_interned_string(ce->parent_name); - } - if (ce->info.user.filename) { zend_accel_store_string(ce->info.user.filename); } diff --git a/ext/opcache/zend_persist_calc.c b/ext/opcache/zend_persist_calc.c index d708758a33..015490b07a 100644 --- a/ext/opcache/zend_persist_calc.c +++ b/ext/opcache/zend_persist_calc.c @@ -387,6 +387,13 @@ void zend_persist_class_entry_calc(zend_class_entry *ce) ADD_SIZE(sizeof(zend_class_entry)); + if (!(ce->ce_flags & ZEND_ACC_CACHED)) { + ADD_INTERNED_STRING(ce->name); + if (ce->parent_name && !(ce->ce_flags & ZEND_ACC_LINKED)) { + ADD_INTERNED_STRING(ce->parent_name); + } + } + zend_hash_persist_calc(&ce->function_table); ZEND_HASH_FOREACH_BUCKET(&ce->function_table, p) { ZEND_ASSERT(p->key != NULL); @@ -444,11 +451,6 @@ void zend_persist_class_entry_calc(zend_class_entry *ce) return; } - ADD_INTERNED_STRING(ce->name); - if (ce->parent_name && !(ce->ce_flags & ZEND_ACC_LINKED)) { - ADD_INTERNED_STRING(ce->parent_name); - } - if (ce->info.user.filename) { ADD_STRING(ce->info.user.filename); } -- 2.50.1