com php-src: Avoid second hash value check: Zend/zend_hash. c
| From: | Dmitry Stogov | Date: | Fri, 24 Nov 2017 09:03:59 +0000 |
| Subject: | com php-src: Avoid second hash value check: Zend/zend_hash. c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-100359@lists.php.net to get a copy of this message | ||
Commit: ed7f39672175e903e33745071dd82823be08ef31
Author: Dmitry Stogov <dmitry@zend.com> Fri, 24 Nov 2017 12:03:59 +0300
Parents: 33b094479b7d2a61ecee52e7ce2bd389426349e9
Branches: master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=ed7f39672175e903e33745071dd82823be08ef31
Log:
Avoid second hash value check
Changed paths:
M Zend/zend_hash.c
Diff:
diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c
index c14cca7..5936b92 100644
--- a/Zend/zend_hash.c
+++ b/Zend/zend_hash.c
@@ -546,9 +546,19 @@ static zend_always_inline zval *_zend_hash_add_or_update_i(HashTable *ht,
zend_s
if (UNEXPECTED(!(ht->u.flags & HASH_FLAG_INITIALIZED))) {
CHECK_INIT(ht, 0);
+ if (!ZSTR_IS_INTERNED(key)) {
+ zend_string_addref(key);
+ ht->u.flags &= ~HASH_FLAG_STATIC_KEYS;
+ zend_string_hash_val(key);
+ }
goto add_to_hash;
} else if (ht->u.flags & HASH_FLAG_PACKED) {
zend_hash_packed_to_hash(ht);
+ if (!ZSTR_IS_INTERNED(key)) {
+ zend_string_addref(key);
+ ht->u.flags &= ~HASH_FLAG_STATIC_KEYS;
+ zend_string_hash_val(key);
+ }
} else if ((flag & HASH_ADD_NEW) == 0) {
p = zend_hash_find_bucket(ht, key);
@@ -582,6 +592,14 @@ static zend_always_inline zval *_zend_hash_add_or_update_i(HashTable *ht,
zend_s
ZVAL_COPY_VALUE(data, pData);
return data;
}
+ if (!ZSTR_IS_INTERNED(key)) {
+ zend_string_addref(key);
+ ht->u.flags &= ~HASH_FLAG_STATIC_KEYS;
+ }
+ } else if (!ZSTR_IS_INTERNED(key)) {
+ zend_string_addref(key);
+ ht->u.flags &= ~HASH_FLAG_STATIC_KEYS;
+ zend_string_hash_val(key);
}
ZEND_HASH_IF_FULL_DO_RESIZE(ht); /* If the Hash table is full, resize it */
@@ -595,11 +613,6 @@ add_to_hash:
zend_hash_iterators_update(ht, HT_INVALID_IDX, idx);
p = ht->arData + idx;
p->key = key;
- if (!ZSTR_IS_INTERNED(key)) {
- zend_string_addref(key);
- ht->u.flags &= ~HASH_FLAG_STATIC_KEYS;
- zend_string_hash_val(key);
- }
p->h = h = ZSTR_H(key);
ZVAL_COPY_VALUE(&p->val, pData);
nIndex = h | ht->nTableMask;