diff options
Diffstat (limited to 'sapi/apache2handler/apache_config.c')
| -rw-r--r-- | sapi/apache2handler/apache_config.c | 18 | 
1 files changed, 18 insertions, 0 deletions
diff --git a/sapi/apache2handler/apache_config.c b/sapi/apache2handler/apache_config.c index bd017535b8..05c9e85828 100644 --- a/sapi/apache2handler/apache_config.c +++ b/sapi/apache2handler/apache_config.c @@ -147,10 +147,28 @@ void config_entry_ctor(zval *zv)  void *merge_php_config(apr_pool_t *p, void *base_conf, void *new_conf)  {  	php_conf_rec *d = base_conf, *e = new_conf, *n = NULL; +#ifdef ZTS +	zend_string *str; +	zval *data; +#endif  	n = create_php_config(p, "merge_php_config");  	/* copy old config */ +#ifdef ZTS +	ZEND_HASH_FOREACH_STR_KEY_VAL(&d->config, str, data) { +		zend_string *key; +		zval *new_entry; + +		/* Avoid sharing the non interned string among threads. */ +		key = zend_string_dup(str, 1); + +		new_entry = zend_hash_add(&n->config, key, data); + +		config_entry_ctor(new_entry); +	} ZEND_HASH_FOREACH_END(); +#else  	zend_hash_copy(&n->config, &d->config, config_entry_ctor); +#endif  	/* merge new config */  	phpapdebug((stderr, "Merge dir (%p)+(%p)=(%p)\n", base_conf, new_conf, n));  	zend_hash_merge_ex(&n->config, &e->config, config_entry_ctor, should_overwrite_per_dir_entry, NULL);  | 
