@@ -94,13 +94,15 @@ static void zend_hash_persist(HashTable *ht, zend_persist_func_t pPersistElement
94
94
/* compact table */
95
95
void * old_data = HT_GET_DATA_ADDR (ht );
96
96
Bucket * old_buckets = ht -> arData ;
97
- int32_t hash_size = - ( int32_t ) ht -> nTableMask ;
97
+ int32_t hash_size ;
98
98
99
- while (hash_size >> 1 > ht -> nNumUsed ) {
100
- hash_size >>= 1 ;
101
- }
102
- if (hash_size < - HT_MIN_MASK ) {
103
- hash_size = - HT_MIN_MASK ;
99
+ if (ht -> nNumUsed <= HT_MIN_SIZE ) {
100
+ hash_size = HT_MIN_SIZE ;
101
+ } else {
102
+ hash_size = - (int32_t )ht -> nTableMask ;
103
+ while (hash_size >> 1 > ht -> nNumUsed ) {
104
+ hash_size >>= 1 ;
105
+ }
104
106
}
105
107
ht -> nTableMask = - hash_size ;
106
108
ZEND_ASSERT (((zend_uintptr_t )ZCG (mem ) & 0x7 ) == 0 ); /* should be 8 byte aligned */
@@ -174,13 +176,15 @@ static void zend_hash_persist_immutable(HashTable *ht)
174
176
/* compact table */
175
177
void * old_data = HT_GET_DATA_ADDR (ht );
176
178
Bucket * old_buckets = ht -> arData ;
177
- int32_t hash_size = - ( int32_t ) ht -> nTableMask ;
179
+ int32_t hash_size ;
178
180
179
- while (hash_size >> 1 > ht -> nNumUsed ) {
180
- hash_size >>= 1 ;
181
- }
182
- if (hash_size < - HT_MIN_MASK ) {
183
- hash_size = - HT_MIN_MASK ;
181
+ if (ht -> nNumUsed <= HT_MIN_SIZE ) {
182
+ hash_size = HT_MIN_SIZE ;
183
+ } else {
184
+ hash_size = - (int32_t )ht -> nTableMask ;
185
+ while (hash_size >> 1 > ht -> nNumUsed ) {
186
+ hash_size >>= 1 ;
187
+ }
184
188
}
185
189
ht -> nTableMask = - hash_size ;
186
190
ZEND_ASSERT (((zend_uintptr_t )ZCG (mem ) & 0x7 ) == 0 ); /* should be 8 byte aligned */
0 commit comments