summaryrefslogtreecommitdiff
path: root/Zend/zend_API.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2018-10-01 19:05:31 +0300
committerDmitry Stogov <dmitry@zend.com>2018-10-01 19:05:31 +0300
commita2e83346134c7a197492cb520ad440e0e1aff463 (patch)
tree82e98f145137a2877254fbe1836bf9753accf37e /Zend/zend_API.c
parent250b577258ba9a736a15527f211ba52c9368d322 (diff)
downloadphp-git-a2e83346134c7a197492cb520ad440e0e1aff463.tar.gz
Allocate only necessary space for static properties of internal classes in ZTS mode.
Diffstat (limited to 'Zend/zend_API.c')
-rw-r--r--Zend/zend_API.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/Zend/zend_API.c b/Zend/zend_API.c
index 8c6113c0e1..81a4ee7698 100644
--- a/Zend/zend_API.c
+++ b/Zend/zend_API.c
@@ -3698,6 +3698,16 @@ ZEND_API int zend_declare_property_ex(zend_class_entry *ce, zend_string *name, z
ZVAL_COPY_VALUE(&ce->default_static_members_table[property_info->offset], property);
if (ce->type == ZEND_USER_CLASS) {
ce->static_members_table = ce->default_static_members_table;
+#ifdef ZTS
+ } else if (!ce->static_members_table_idx) {
+ CG(last_static_member)++;
+ ce->static_members_table_idx = CG(last_static_member);
+ if (CG(static_members_table)) {
+ /* Support for run-time declaration: dl() */
+ CG(static_members_table) = realloc(CG(static_members_table), (CG(last_static_member) + 1) * sizeof(zval*));
+ CG(static_members_table)[ce->static_members_table_idx] = NULL;
+ }
+#endif
}
} else {
if ((property_info_ptr = zend_hash_find_ptr(&ce->properties_info, name)) != NULL &&