summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2017-10-31 02:16:46 +0300
committerDmitry Stogov <dmitry@zend.com>2017-10-31 02:16:46 +0300
commit974a8f8ad2a0ed923abb5c63cfc7d73e2c81e21f (patch)
treea34da1c72e0c210def77b1b36e25d4c4232ed4ae
parent8482a6f51184c1c099a74c8252ca2b609f3b5ea7 (diff)
downloadphp-git-974a8f8ad2a0ed923abb5c63cfc7d73e2c81e21f.tar.gz
Use internet strings for EG(ini_entries)
-rw-r--r--Zend/zend.c4
-rw-r--r--Zend/zend_ini.c12
-rw-r--r--ext/opcache/ZendAccelerator.c17
-rw-r--r--ext/opcache/zend_accelerator_module.c6
-rw-r--r--main/main.c4
5 files changed, 30 insertions, 13 deletions
diff --git a/Zend/zend.c b/Zend/zend.c
index fc2b15b54b..47c95c9dd1 100644
--- a/Zend/zend.c
+++ b/Zend/zend.c
@@ -948,10 +948,6 @@ void zend_shutdown(void) /* {{{ */
GLOBAL_CONSTANTS_TABLE = NULL;
#endif
zend_destroy_rsrc_list_dtors();
-
-#ifndef ZTS
- zend_interned_strings_dtor();
-#endif
}
/* }}} */
diff --git a/Zend/zend_ini.c b/Zend/zend_ini.c
index f585bba2d2..4c1f52d4af 100644
--- a/Zend/zend_ini.c
+++ b/Zend/zend_ini.c
@@ -157,13 +157,13 @@ static void copy_ini_entry(zval *zv) /* {{{ */
Z_PTR_P(zv) = new_entry;
memcpy(new_entry, old_entry, sizeof(zend_ini_entry));
if (old_entry->name) {
- new_entry->name = zend_string_init(ZSTR_VAL(old_entry->name), ZSTR_LEN(old_entry->name), 1);
+ new_entry->name = zend_string_dup(old_entry->name, 1);
}
if (old_entry->value) {
- new_entry->value = zend_string_init(ZSTR_VAL(old_entry->value), ZSTR_LEN(old_entry->value), 1);
+ new_entry->value = zend_string_dup(old_entry->value, 1);
}
if (old_entry->orig_value) {
- new_entry->orig_value = zend_string_init(ZSTR_VAL(old_entry->orig_value), ZSTR_LEN(old_entry->orig_value), 1);
+ new_entry->orig_value = zend_string_dup(old_entry->orig_value, 1);
}
}
/* }}} */
@@ -231,7 +231,7 @@ ZEND_API int zend_register_ini_entries(const zend_ini_entry_def *ini_entry, int
while (ini_entry->name) {
p = pemalloc(sizeof(zend_ini_entry), 1);
- p->name = zend_string_init(ini_entry->name, ini_entry->name_length, 1);
+ p->name = zend_string_init_interned(ini_entry->name, ini_entry->name_length, 1);
p->on_modify = ini_entry->on_modify;
p->mh_arg1 = ini_entry->mh_arg1;
p->mh_arg2 = ini_entry->mh_arg2;
@@ -255,10 +255,10 @@ ZEND_API int zend_register_ini_entries(const zend_ini_entry_def *ini_entry, int
if (((default_value = zend_get_configuration_directive(p->name)) != NULL) &&
(!p->on_modify || p->on_modify(p, Z_STR_P(default_value), p->mh_arg1, p->mh_arg2, p->mh_arg3, ZEND_INI_STAGE_STARTUP) == SUCCESS)) {
- p->value = zend_string_copy(Z_STR_P(default_value));
+ p->value = zend_new_interned_string(zend_string_copy(Z_STR_P(default_value)));
} else {
p->value = ini_entry->value ?
- zend_string_init(ini_entry->value, ini_entry->value_length, 1) : NULL;
+ zend_string_init_interned(ini_entry->value, ini_entry->value_length, 1) : NULL;
if (p->on_modify) {
p->on_modify(p, p->value, p->mh_arg1, p->mh_arg2, p->mh_arg3, ZEND_INI_STAGE_STARTUP);
diff --git a/ext/opcache/ZendAccelerator.c b/ext/opcache/ZendAccelerator.c
index 02de091a58..d2ad109254 100644
--- a/ext/opcache/ZendAccelerator.c
+++ b/ext/opcache/ZendAccelerator.c
@@ -662,6 +662,23 @@ static void accel_copy_permanent_strings(zend_new_interned_string_func_t new_int
p->key = new_interned_string(p->key);
}
} ZEND_HASH_FOREACH_END();
+
+ ZEND_HASH_FOREACH_BUCKET(EG(ini_directives), p) {
+ zend_ini_entry *entry = (zend_ini_entry*)Z_PTR(p->val);
+
+ if (p->key) {
+ p->key = new_interned_string(p->key);
+ }
+ if (entry->name) {
+ entry->name = new_interned_string(entry->name);
+ }
+ if (entry->value) {
+ entry->value = new_interned_string(entry->value);
+ }
+ if (entry->orig_value) {
+ entry->orig_value = new_interned_string(entry->orig_value);
+ }
+ } ZEND_HASH_FOREACH_END();
}
static zend_string *accel_replace_string_by_shm_permanent(zend_string *str)
diff --git a/ext/opcache/zend_accelerator_module.c b/ext/opcache/zend_accelerator_module.c
index 6c8efac7c7..31e5e948a7 100644
--- a/ext/opcache/zend_accelerator_module.c
+++ b/ext/opcache/zend_accelerator_module.c
@@ -128,7 +128,7 @@ static ZEND_INI_MH(OnUpdateMemoryConsumption)
return FAILURE;
}
- ini_entry->value = zend_string_init(new_new_value, 1, 1);
+ ini_entry->value = zend_string_init_interned(new_new_value, 1, 1);
}
if (UNEXPECTED(memsize > ZEND_ULONG_MAX / (1024 * 1024))) {
*p = ZEND_ULONG_MAX;
@@ -176,7 +176,7 @@ static ZEND_INI_MH(OnUpdateMaxAcceleratedFiles)
sizeof("opcache.max_accelerated_files")-1)) == NULL) {
return FAILURE;
}
- ini_entry->value = zend_string_init(new_new_value, strlen(new_new_value), 1);
+ ini_entry->value = zend_string_init_interned(new_new_value, strlen(new_new_value), 1);
}
*p = size;
return SUCCESS;
@@ -210,7 +210,7 @@ static ZEND_INI_MH(OnUpdateMaxWastedPercentage)
sizeof("opcache.max_wasted_percentage")-1)) == NULL) {
return FAILURE;
}
- ini_entry->value = zend_string_init(new_new_value, strlen(new_new_value), 1);
+ ini_entry->value = zend_string_init_interned(new_new_value, strlen(new_new_value), 1);
}
*p = (double)percentage / 100.0;
return SUCCESS;
diff --git a/main/main.c b/main/main.c
index ef619a76fa..962b9d5e9b 100644
--- a/main/main.c
+++ b/main/main.c
@@ -2347,6 +2347,10 @@ void php_module_shutdown(void)
php_output_shutdown();
+#ifndef ZTS
+ zend_interned_strings_dtor();
+#endif
+
module_initialized = 0;
#ifndef ZTS