com php-src: Avoid second hash value check: Zend/zend_hash. c

From: 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;

« previous php.cvs (#100359) next »