From: Xinchen Hui Date: Tue, 31 Mar 2015 08:52:30 +0000 (+0800) Subject: Revert "Better to taverse reversely" X-Git-Tag: PRE_PHP7_NSAPI_REMOVAL~440 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ceb77b64726729657723927998e3166f6f2a3a3d;p=php Revert "Better to taverse reversely" This reverts commit 51451ab84ad24430c0e3e3cf67eac297be9cf917. --- diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c index 01e51b72a7..1fd3ccf3d9 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -266,13 +266,14 @@ ZEND_API void ZEND_FASTCALL zend_hash_set_apply_protection(HashTable *ht, zend_b ZEND_API uint32_t ZEND_FASTCALL zend_hash_iterator_add(HashTable *ht, HashPosition pos) { - HashTableIterator *iter = EG(ht_iterators) + EG(ht_iterators_used); + HashTableIterator *iter = EG(ht_iterators); + HashTableIterator *end = iter + EG(ht_iterators_count); uint32_t idx; if (EXPECTED(ht->u.v.nIteratorsCount != 255)) { ht->u.v.nIteratorsCount++; } - while (iter-- != EG(ht_iterators)) { + while (iter != end) { if (iter->ht == NULL) { iter->ht = ht; iter->pos = pos; @@ -282,6 +283,7 @@ ZEND_API uint32_t ZEND_FASTCALL zend_hash_iterator_add(HashTable *ht, HashPositi } return idx; } + iter++; } if (EG(ht_iterators) == EG(ht_iterators_slots)) { EG(ht_iterators) = emalloc(sizeof(HashTableIterator) * (EG(ht_iterators_count) + 8)); @@ -340,13 +342,15 @@ ZEND_API void ZEND_FASTCALL zend_hash_iterator_del(uint32_t idx) static zend_never_inline void ZEND_FASTCALL _zend_hash_iterators_remove(HashTable *ht) { - HashTableIterator *iter = EG(ht_iterators) + EG(ht_iterators_used); + HashTableIterator *iter = EG(ht_iterators); + HashTableIterator *end = iter + EG(ht_iterators_used); uint32_t idx; - while (iter-- != EG(ht_iterators)) { + while (iter != end) { if (iter->ht == ht) { iter->ht = NULL; } + iter++; } idx = EG(ht_iterators_used); @@ -365,27 +369,31 @@ static zend_always_inline void zend_hash_iterators_remove(HashTable *ht) ZEND_API HashPosition ZEND_FASTCALL zend_hash_iterators_lower_pos(HashTable *ht, HashPosition start) { - HashTableIterator *iter = EG(ht_iterators) + EG(ht_iterators_used); + HashTableIterator *iter = EG(ht_iterators); + HashTableIterator *end = iter + EG(ht_iterators_used); HashPosition res = HT_INVALID_IDX; - while (iter-- != EG(ht_iterators)) { + while (iter != end) { if (iter->ht == ht) { if (iter->pos >= start && iter->pos < res) { res = iter->pos; } } + iter++; } return res; } ZEND_API void ZEND_FASTCALL _zend_hash_iterators_update(HashTable *ht, HashPosition from, HashPosition to) { - HashTableIterator *iter = EG(ht_iterators) + EG(ht_iterators_used); + HashTableIterator *iter = EG(ht_iterators); + HashTableIterator *end = iter + EG(ht_iterators_used); - while (iter-- != EG(ht_iterators)) { + while (iter != end) { if (iter->ht == ht && iter->pos == from) { iter->pos = to; } + iter++; } }