com php-src: optimized colision list traverse: Zend/zend_hash .c
| From: | Dmitry Stogov | Date: | Tue, 16 Sep 2014 20:52:03 +0000 |
| Subject: | com php-src: optimized colision list traverse: Zend/zend_hash .c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-81702@lists.php.net to get a copy of this message | ||
Commit: c2decc6afc594ef67bc8f21e0f8d79a8236b000e
Author: Dmitry Stogov <dmitry@zend.com> Wed, 17 Sep 2014 00:52:03 +0400
Parents: 7ba43ea05241ad474d40ab199c6a710e21048cd5
Branches: master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=c2decc6afc594ef67bc8f21e0f8d79a8236b000e
Log:
optimized colision list traverse
Changed paths:
M Zend/zend_hash.c
Diff:
diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c
index ba18b9b..e603069 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);
}
}