]> granicus.if.org Git - php/commitdiff
Prefer already cached version of the script
authorDmitry Stogov <dmitry@zend.com>
Wed, 20 May 2020 20:04:34 +0000 (23:04 +0300)
committerDmitry Stogov <dmitry@zend.com>
Wed, 20 May 2020 20:04:34 +0000 (23:04 +0300)
ext/opcache/ZendAccelerator.c
ext/opcache/zend_accelerator_util_funcs.c

index 79941a7d13d3941a57b70de3d58abe3e25e9becd..25c76c4a5e4af6c6d2b44464552a6c773dea14e2 100644 (file)
@@ -1471,7 +1471,14 @@ static zend_persistent_script *cache_script_in_shared_memory(zend_persistent_scr
                                zend_accel_add_key(key, key_length, bucket);
                        }
                        zend_shared_alloc_unlock();
+#if 1
+                       /* prefer the script already stored in SHM */
+                       free_persistent_script(new_persistent_script, 1);
+                       *from_shared_memory = 1;
+                       return existing_persistent_script;
+#else
                        return new_persistent_script;
+#endif
                }
        }
 
index 131fc8495b910dceddcf79929afb3398ddad686e..db2ee8c434856875dbb7183c1afc3b71dc34045a 100644 (file)
@@ -64,6 +64,8 @@ void free_persistent_script(zend_persistent_script *persistent_script, int destr
        if (!destroy_elements) {
                persistent_script->script.function_table.pDestructor = NULL;
                persistent_script->script.class_table.pDestructor = NULL;
+       } else {
+               destroy_op_array(&persistent_script->script.main_op_array);
        }
 
        zend_hash_destroy(&persistent_script->script.function_table);