From: Dmitry Stogov Date: Tue, 16 Sep 2014 20:52:03 +0000 (+0400) Subject: optimized colision list traverse X-Git-Tag: POST_NATIVE_TLS_MERGE^2~249 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c2decc6afc594ef67bc8f21e0f8d79a8236b000e;p=php optimized colision list traverse --- diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c index ba18b9b48c..e603069e4a 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -643,19 +643,18 @@ static zend_always_inline void _zend_hash_del_el_ex(HashTable *ht, uint32_t idx, static zend_always_inline void _zend_hash_del_el(HashTable *ht, uint32_t idx, Bucket *p) { - uint32_t nIndex; Bucket *prev = NULL; if (!(ht->u.flags & HASH_FLAG_PACKED)) { - nIndex = p->h & ht->nTableMask; - idx = ht->arHash[nIndex]; - if (p != ht->arData + idx) { - prev = ht->arData + idx; - while (ht->arData + Z_NEXT(prev->val) != p) { - idx = Z_NEXT(prev->val); - prev = ht->arData + idx; + uint32_t nIndex = p->h & ht->nTableMask; + uint32_t i = ht->arHash[nIndex]; + + if (i != idx) { + prev = ht->arData + i; + while (Z_NEXT(prev->val) != idx) { + i = Z_NEXT(prev->val); + prev = ht->arData + i; } - idx = Z_NEXT(prev->val); } }