summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/opcache/tests/preload.inc4
-rw-r--r--ext/opcache/zend_persist.c10
-rw-r--r--ext/opcache/zend_persist_calc.c2
3 files changed, 12 insertions, 4 deletions
diff --git a/ext/opcache/tests/preload.inc b/ext/opcache/tests/preload.inc
index af20c4947f..0e09ad366c 100644
--- a/ext/opcache/tests/preload.inc
+++ b/ext/opcache/tests/preload.inc
@@ -37,3 +37,7 @@ trait T2 {
class Y {
use T2;
}
+
+class Z {
+ public $foo;
+}
diff --git a/ext/opcache/zend_persist.c b/ext/opcache/zend_persist.c
index 188c31ea31..d22b855f58 100644
--- a/ext/opcache/zend_persist.c
+++ b/ext/opcache/zend_persist.c
@@ -874,9 +874,13 @@ static void zend_persist_class_entry(zval *zv)
int i;
size_t size = sizeof(zend_property_info *) * ce->default_properties_count;
- memcpy(ZCG(arena_mem), ce->properties_info_table, size);
- ce->properties_info_table = ZCG(arena_mem);
- ZCG(arena_mem) = (void*)((char*)ZCG(arena_mem) + ZEND_ALIGNED_SIZE(size));
+ if (ZCG(is_immutable_class)) {
+ ce->properties_info_table = zend_shared_memdup_put(
+ ce->properties_info_table, size);
+ } else {
+ ce->properties_info_table = zend_shared_memdup_arena_put(
+ ce->properties_info_table, size);
+ }
for (i = 0; i < ce->default_properties_count; i++) {
ce->properties_info_table[i] = zend_shared_alloc_get_xlat_entry(ce->properties_info_table[i]);
diff --git a/ext/opcache/zend_persist_calc.c b/ext/opcache/zend_persist_calc.c
index 21f6d45b5b..7daac7b51c 100644
--- a/ext/opcache/zend_persist_calc.c
+++ b/ext/opcache/zend_persist_calc.c
@@ -388,7 +388,7 @@ static void zend_persist_class_entry_calc(zval *zv)
zend_hash_persist_calc(&ce->properties_info, zend_persist_property_info_calc);
if (ce->properties_info_table) {
- ADD_ARENA_SIZE(sizeof(zend_property_info *) * ce->default_properties_count);
+ ADD_SIZE_EX(sizeof(zend_property_info *) * ce->default_properties_count);
}
if (ce->num_interfaces) {