]> granicus.if.org Git - php/commitdiff
Use internet strings for EG(ini_entries)
authorDmitry Stogov <dmitry@zend.com>
Mon, 30 Oct 2017 23:16:46 +0000 (02:16 +0300)
committerDmitry Stogov <dmitry@zend.com>
Mon, 30 Oct 2017 23:16:46 +0000 (02:16 +0300)
Zend/zend.c
Zend/zend_ini.c
ext/opcache/ZendAccelerator.c
ext/opcache/zend_accelerator_module.c
main/main.c

index fc2b15b54b86fb35814c072b24844b91e2105bfe..47c95c9dd16bfc35beda35513ea7931652aff390 100644 (file)
@@ -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
 }
 /* }}} */
 
index f585bba2d2a66ce7f0e0edbc55b6398c93b11a8c..4c1f52d4af784c4b65ea12fa4254ac12754848a9 100644 (file)
@@ -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);
index 02de091a586d197fea8a3a2aa8727a35a3bc72d2..d2ad109254882cb18e16916afff5609cccba773b 100644 (file)
@@ -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)
index 6c8efac7c71b2b431e88a67f85632eed01092d73..31e5e948a7b30539b3d4d74c37b08865c753eafb 100644 (file)
@@ -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;
index ef619a76faefe6065fd19ba313df35dfd8d7a6a4..962b9d5e9b8e781bd55c811366740aeec2111720 100644 (file)
@@ -2347,6 +2347,10 @@ void php_module_shutdown(void)
 
        php_output_shutdown();
 
+#ifndef ZTS
+       zend_interned_strings_dtor();
+#endif
+
        module_initialized = 0;
 
 #ifndef ZTS