From c2decc6afc594ef67bc8f21e0f8d79a8236b000e Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Wed, 17 Sep 2014 00:52:03 +0400 Subject: [PATCH] optimized colision list traverse --- Zend/zend_hash.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) 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); } } -- 2.50.1