]> granicus.if.org Git - php/commitdiff
zend_hash_resize seems useless, use zend_hash_extend
authorXinchen Hui <laruence@php.net>
Thu, 13 Aug 2015 04:19:35 +0000 (12:19 +0800)
committerXinchen Hui <laruence@php.net>
Thu, 13 Aug 2015 04:19:35 +0000 (12:19 +0800)
Zend/zend_hash.c
Zend/zend_hash.h
ext/standard/var_unserializer.c
ext/standard/var_unserializer.re

index 7e06cf0e8cc9144c8fbd32a0da7a86bdb2d68231..89a5995683f813d069f8eccf56110ab7559232fb 100644 (file)
@@ -250,13 +250,14 @@ ZEND_API void ZEND_FASTCALL zend_hash_extend(HashTable *ht, uint32_t nSize, zend
                } else {
                        ZEND_ASSERT(!(ht->u.flags & HASH_FLAG_PACKED));
                        if (nSize > ht->nTableSize) {
-                               void *old_data = HT_GET_DATA_ADDR(ht);
+                               void *new_data, *old_data = HT_GET_DATA_ADDR(ht);
                                Bucket *old_buckets = ht->arData;
-
+                               nSize = zend_hash_check_size(nSize);
                                HANDLE_BLOCK_INTERRUPTIONS();
-                               ht->nTableSize = zend_hash_check_size(nSize);
+                               new_data = pemalloc(HT_DATA_SIZE_EX(nSize) + HT_HASH_SIZE_EX(-nSize), ht->u.flags & HASH_FLAG_PERSISTENT);
+                               ht->nTableSize = nSize;
                                ht->nTableMask = -ht->nTableSize;
-                               HT_SET_DATA_ADDR(ht, pemalloc(HT_SIZE(ht), ht->u.flags & HASH_FLAG_PERSISTENT));
+                               HT_SET_DATA_ADDR(ht, new_data);
                                memcpy(ht->arData, old_buckets, sizeof(Bucket) * ht->nNumUsed);
                                pefree(old_data, ht->u.flags & HASH_FLAG_PERSISTENT);
                                zend_hash_rehash(ht);
@@ -813,26 +814,6 @@ static void ZEND_FASTCALL zend_hash_do_resize(HashTable *ht)
        }
 }
 
-ZEND_API void ZEND_FASTCALL zend_hash_resize(HashTable *ht, uint32_t nSize) {
-       nSize = zend_hash_check_size(nSize);
-       if (ht->u.flags & HASH_FLAG_INITIALIZED) {
-               void *new_data, *old_data = HT_GET_DATA_ADDR(ht);
-               Bucket *old_buckets = ht->arData;
-
-               HANDLE_BLOCK_INTERRUPTIONS();
-               new_data = pemalloc(HT_DATA_SIZE_EX(nSize) + HT_HASH_SIZE_EX(-nSize), ht->u.flags & HASH_FLAG_PERSISTENT);
-               ht->nTableSize = nSize;
-               ht->nTableMask = -ht->nTableSize;
-               HT_SET_DATA_ADDR(ht, new_data);
-               memcpy(ht->arData, old_buckets, sizeof(Bucket) * ht->nNumUsed);
-               pefree(old_data, ht->u.flags & HASH_FLAG_PERSISTENT);
-               zend_hash_rehash(ht);
-               HANDLE_UNBLOCK_INTERRUPTIONS();
-       } else {
-               ht->nTableSize = nSize;
-       }
-}
-
 ZEND_API int ZEND_FASTCALL zend_hash_rehash(HashTable *ht)
 {
        Bucket *p;
index ae7baa5cd01c59d48b5e7df5a6cbf01be248075c..4a33b959cb44880014f96c1552ad3d0edd168be8 100644 (file)
@@ -212,7 +212,6 @@ ZEND_API zval* ZEND_FASTCALL zend_hash_minmax(const HashTable *ht, compare_func_
 #define zend_hash_next_free_element(ht) \
        (ht)->nNextFreeElement
 
-ZEND_API void ZEND_FASTCALL zend_hash_resize(HashTable *ht, uint32_t nSize);
 ZEND_API int ZEND_FASTCALL zend_hash_rehash(HashTable *ht);
 
 ZEND_API HashTable* ZEND_FASTCALL zend_array_dup(HashTable *source);
index 3f7bf1cb04d7ec3e20be921f783d0de0fcb4fa60..046db564ac39263472d38a9c5b5f3e2a44382a34 100644 (file)
@@ -477,7 +477,7 @@ static inline int object_common2(UNSERIALIZE_PARAMETER, zend_long elements)
        }
 
        ht = Z_OBJPROP_P(rval);
-       zend_hash_resize(ht, zend_hash_num_elements(ht) + elements);
+       zend_hash_extend(ht, zend_hash_num_elements(ht) + elements, (ht->u.flags & HASH_FLAG_PACKED));
        if (!process_nested_data(UNSERIALIZE_PASSTHRU, ht, elements, 1)) {
                return 0;
        }
index 25c519e83283880af5bc33e4d2bce74545091e1c..be6a12f630cd96537314aad278f78f792ceeca9e 100644 (file)
@@ -481,7 +481,7 @@ static inline int object_common2(UNSERIALIZE_PARAMETER, zend_long elements)
        }
 
        ht = Z_OBJPROP_P(rval);
-       zend_hash_resize(ht, zend_hash_num_elements(ht) + elements);
+       zend_hash_extend(ht, zend_hash_num_elements(ht) + elements, (ht->u.flags & HASH_FLAG_PACKED));
        if (!process_nested_data(UNSERIALIZE_PASSTHRU, ht, elements, 1)) {
                return 0;
        }