]> granicus.if.org Git - php/commitdiff
Reuse interned strings from opcache SHM, if possible.
authorDmitry Stogov <dmitry@zend.com>
Mon, 16 Oct 2017 16:20:16 +0000 (19:20 +0300)
committerDmitry Stogov <dmitry@zend.com>
Mon, 16 Oct 2017 16:20:16 +0000 (19:20 +0300)
ext/mysqlnd/mysqlnd_wireprotocol.c
ext/opcache/ZendAccelerator.c

index 9d951746f8ca6010a4768fe8645e312aa857e305..b948b8b81c4789d4b6854eb1e7f6b1f79f7601d7 100644 (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();
        }
index 78dc60366ad79b2b87dde524f41f320e7dd187d6..501aae48b137061e9383802af733a4e8f26b2163 100644 (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)
 {