summaryrefslogtreecommitdiff
path: root/Zend/zend_inheritance.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2021-01-19 11:55:09 +0300
committerDmitry Stogov <dmitry@zend.com>2021-01-19 11:55:09 +0300
commitb3bbb8fe3be329586520fed3ea4a97f9632e84b2 (patch)
treed04225d781cf6587d22545844451f31df521de50 /Zend/zend_inheritance.c
parentc195fcd67894a7589db1696fb42ed517b24eef6b (diff)
downloadphp-git-b3bbb8fe3be329586520fed3ea4a97f9632e84b2.tar.gz
Mark classes cached by opcache by ZEND_ACC_CACHED flag and prevent useless copying and desrpoying of immutable data.
Diffstat (limited to 'Zend/zend_inheritance.c')
-rw-r--r--Zend/zend_inheritance.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/Zend/zend_inheritance.c b/Zend/zend_inheritance.c
index de7e70f169..16e31a10d8 100644
--- a/Zend/zend_inheritance.c
+++ b/Zend/zend_inheritance.c
@@ -1549,11 +1549,13 @@ static void zend_do_implement_interfaces(zend_class_entry *ce, zend_class_entry
}
}
- for (i = 0; i < ce->num_interfaces; i++) {
- zend_string_release_ex(ce->interface_names[i].name, 0);
- zend_string_release_ex(ce->interface_names[i].lc_name, 0);
+ if (!(ce->ce_flags & ZEND_ACC_CACHED)) {
+ for (i = 0; i < ce->num_interfaces; i++) {
+ zend_string_release_ex(ce->interface_names[i].name, 0);
+ zend_string_release_ex(ce->interface_names[i].lc_name, 0);
+ }
+ efree(ce->interface_names);
}
- efree(ce->interface_names);
ce->num_interfaces = num_interfaces;
ce->interfaces = interfaces;