Reuse interned strings from opcache SHM, if possible.

This commit is contained in:
Dmitry Stogov 2017-10-16 19:20:16 +03:00
parent a87484aa22
commit 1dd224dd12
2 changed files with 14 additions and 5 deletions

View File

@ -1375,7 +1375,7 @@ php_mysqlnd_rset_field_read(void * _packet)
meta->root_len = total_len;
if (meta->name != mysqlnd_empty_string) {
meta->sname = zend_string_init(meta->name, meta->name_length, packet->persistent_alloc);
meta->sname = zend_new_interned_string(zend_string_init(meta->name, meta->name_length, packet->persistent_alloc));
} else {
meta->sname = ZSTR_EMPTY_ALLOC();
}

View File

@ -346,10 +346,6 @@ static inline void accel_unlock_all(void)
* it creates interned strings in shared memory when saves a script.
* Such interned strings are shared across all PHP processes
*/
static zend_string *accel_new_interned_string_for_php(zend_string *str)
{
return str;
}
static void accel_interned_strings_restore_state(void)
{
@ -491,6 +487,19 @@ zend_string *accel_new_interned_string(zend_string *str)
return p->key;
}
static zend_string *accel_new_interned_string_for_php(zend_string *str)
{
if (ZCG(counted)) {
zend_string *ret = accel_find_interned_string(str);
if (ret) {
zend_string_release(str);
return ret;
}
}
return str;
}
/* Copy PHP interned strings from PHP process memory into the shared memory */
static void accel_copy_permanent_strings(zend_new_interned_string_func_t new_interned_string)
{