summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXinchen Hui <laruence@php.net>2015-08-13 12:19:35 +0800
committerXinchen Hui <laruence@php.net>2015-08-13 12:19:35 +0800
commitadf0e499121df263c65aa84e1c75a61dd51f0cf3 (patch)
treea97bb7ab96df8d38bbbe751ad99ca74738922841
parenta089ce0cc6e0bade9bf94399a13bbd63448874b0 (diff)
downloadphp-git-adf0e499121df263c65aa84e1c75a61dd51f0cf3.tar.gz
zend_hash_resize seems useless, use zend_hash_extend
-rw-r--r--Zend/zend_hash.c29
-rw-r--r--Zend/zend_hash.h1
-rw-r--r--ext/standard/var_unserializer.c2
-rw-r--r--ext/standard/var_unserializer.re2
4 files changed, 7 insertions, 27 deletions
diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c
index 7e06cf0e8c..89a5995683 100644
--- a/Zend/zend_hash.c
+++ b/Zend/zend_hash.c
@@ -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;
diff --git a/Zend/zend_hash.h b/Zend/zend_hash.h
index ae7baa5cd0..4a33b959cb 100644
--- a/Zend/zend_hash.h
+++ b/Zend/zend_hash.h
@@ -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);
diff --git a/ext/standard/var_unserializer.c b/ext/standard/var_unserializer.c
index 3f7bf1cb04..046db564ac 100644
--- a/ext/standard/var_unserializer.c
+++ b/ext/standard/var_unserializer.c
@@ -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;
}
diff --git a/ext/standard/var_unserializer.re b/ext/standard/var_unserializer.re
index 25c519e832..be6a12f630 100644
--- a/ext/standard/var_unserializer.re
+++ b/ext/standard/var_unserializer.re
@@ -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;
}