@@ -191,10 +191,8 @@ static void ZEND_FASTCALL zend_hash_packed_grow(HashTable *ht)
191
191
if (ht -> nTableSize >= HT_MAX_SIZE ) {
192
192
zend_error_noreturn (E_ERROR , "Possible integer overflow in memory allocation (%zu * %zu + %zu)" , ht -> nTableSize * 2 , sizeof (Bucket ), sizeof (Bucket ));
193
193
}
194
- HANDLE_BLOCK_INTERRUPTIONS ();
195
194
ht -> nTableSize += ht -> nTableSize ;
196
195
HT_SET_DATA_ADDR (ht , perealloc2 (HT_GET_DATA_ADDR (ht ), HT_SIZE (ht ), HT_USED_SIZE (ht ), ht -> u .flags & HASH_FLAG_PERSISTENT ));
197
- HANDLE_UNBLOCK_INTERRUPTIONS ();
198
196
}
199
197
200
198
ZEND_API void ZEND_FASTCALL zend_hash_real_init (HashTable * ht , zend_bool packed )
@@ -211,15 +209,13 @@ ZEND_API void ZEND_FASTCALL zend_hash_packed_to_hash(HashTable *ht)
211
209
Bucket * old_buckets = ht -> arData ;
212
210
213
211
HT_ASSERT (GC_REFCOUNT (ht ) == 1 );
214
- HANDLE_BLOCK_INTERRUPTIONS ();
215
212
ht -> u .flags &= ~HASH_FLAG_PACKED ;
216
213
new_data = pemalloc (HT_SIZE_EX (ht -> nTableSize , - ht -> nTableSize ), (ht )-> u .flags & HASH_FLAG_PERSISTENT );
217
214
ht -> nTableMask = - ht -> nTableSize ;
218
215
HT_SET_DATA_ADDR (ht , new_data );
219
216
memcpy (ht -> arData , old_buckets , sizeof (Bucket ) * ht -> nNumUsed );
220
217
pefree (old_data , (ht )-> u .flags & HASH_FLAG_PERSISTENT );
221
218
zend_hash_rehash (ht );
222
- HANDLE_UNBLOCK_INTERRUPTIONS ();
223
219
}
224
220
225
221
ZEND_API void ZEND_FASTCALL zend_hash_to_packed (HashTable * ht )
@@ -228,15 +224,13 @@ ZEND_API void ZEND_FASTCALL zend_hash_to_packed(HashTable *ht)
228
224
Bucket * old_buckets = ht -> arData ;
229
225
230
226
HT_ASSERT (GC_REFCOUNT (ht ) == 1 );
231
- HANDLE_BLOCK_INTERRUPTIONS ();
232
227
new_data = pemalloc (HT_SIZE_EX (ht -> nTableSize , HT_MIN_MASK ), (ht )-> u .flags & HASH_FLAG_PERSISTENT );
233
228
ht -> u .flags |= HASH_FLAG_PACKED | HASH_FLAG_STATIC_KEYS ;
234
229
ht -> nTableMask = HT_MIN_MASK ;
235
230
HT_SET_DATA_ADDR (ht , new_data );
236
231
HT_HASH_RESET_PACKED (ht );
237
232
memcpy (ht -> arData , old_buckets , sizeof (Bucket ) * ht -> nNumUsed );
238
233
pefree (old_data , (ht )-> u .flags & HASH_FLAG_PERSISTENT );
239
- HANDLE_UNBLOCK_INTERRUPTIONS ();
240
234
}
241
235
242
236
ZEND_API void ZEND_FASTCALL _zend_hash_init_ex (HashTable * ht , uint32_t nSize , dtor_func_t pDestructor , zend_bool persistent , zend_bool bApplyProtection ZEND_FILE_LINE_DC )
@@ -260,26 +254,22 @@ ZEND_API void ZEND_FASTCALL zend_hash_extend(HashTable *ht, uint32_t nSize, zend
260
254
if (packed ) {
261
255
ZEND_ASSERT (ht -> u .flags & HASH_FLAG_PACKED );
262
256
if (nSize > ht -> nTableSize ) {
263
- HANDLE_BLOCK_INTERRUPTIONS ();
264
257
ht -> nTableSize = zend_hash_check_size (nSize );
265
258
HT_SET_DATA_ADDR (ht , perealloc2 (HT_GET_DATA_ADDR (ht ), HT_SIZE (ht ), HT_USED_SIZE (ht ), ht -> u .flags & HASH_FLAG_PERSISTENT ));
266
- HANDLE_UNBLOCK_INTERRUPTIONS ();
267
259
}
268
260
} else {
269
261
ZEND_ASSERT (!(ht -> u .flags & HASH_FLAG_PACKED ));
270
262
if (nSize > ht -> nTableSize ) {
271
263
void * new_data , * old_data = HT_GET_DATA_ADDR (ht );
272
264
Bucket * old_buckets = ht -> arData ;
273
265
nSize = zend_hash_check_size (nSize );
274
- HANDLE_BLOCK_INTERRUPTIONS ();
275
266
new_data = pemalloc (HT_SIZE_EX (nSize , - nSize ), ht -> u .flags & HASH_FLAG_PERSISTENT );
276
267
ht -> nTableSize = nSize ;
277
268
ht -> nTableMask = - ht -> nTableSize ;
278
269
HT_SET_DATA_ADDR (ht , new_data );
279
270
memcpy (ht -> arData , old_buckets , sizeof (Bucket ) * ht -> nNumUsed );
280
271
pefree (old_data , ht -> u .flags & HASH_FLAG_PERSISTENT );
281
272
zend_hash_rehash (ht );
282
- HANDLE_UNBLOCK_INTERRUPTIONS ();
283
273
}
284
274
}
285
275
}
@@ -591,20 +581,17 @@ static zend_always_inline zval *_zend_hash_add_or_update_i(HashTable *ht, zend_s
591
581
data = Z_INDIRECT_P (data );
592
582
}
593
583
}
594
- HANDLE_BLOCK_INTERRUPTIONS ();
595
584
if (ht -> pDestructor ) {
596
585
ht -> pDestructor (data );
597
586
}
598
587
ZVAL_COPY_VALUE (data , pData );
599
- HANDLE_UNBLOCK_INTERRUPTIONS ();
600
588
return data ;
601
589
}
602
590
}
603
591
604
592
ZEND_HASH_IF_FULL_DO_RESIZE (ht ); /* If the Hash table is full, resize it */
605
593
606
594
add_to_hash :
607
- HANDLE_BLOCK_INTERRUPTIONS ();
608
595
idx = ht -> nNumUsed ++ ;
609
596
ht -> nNumOfElements ++ ;
610
597
if (ht -> nInternalPointer == HT_INVALID_IDX ) {
@@ -623,7 +610,6 @@ static zend_always_inline zval *_zend_hash_add_or_update_i(HashTable *ht, zend_s
623
610
nIndex = h | ht -> nTableMask ;
624
611
Z_NEXT (p -> val ) = HT_HASH (ht , nIndex );
625
612
HT_HASH (ht , nIndex ) = HT_IDX_TO_HASH (idx );
626
- HANDLE_UNBLOCK_INTERRUPTIONS ();
627
613
628
614
return & p -> val ;
629
615
}
@@ -762,7 +748,6 @@ static zend_always_inline zval *_zend_hash_index_add_or_update_i(HashTable *ht,
762
748
}
763
749
764
750
add_to_packed :
765
- HANDLE_BLOCK_INTERRUPTIONS ();
766
751
/* incremental initialization of empty Buckets */
767
752
if ((flag & (HASH_ADD_NEW |HASH_ADD_NEXT )) == (HASH_ADD_NEW |HASH_ADD_NEXT )) {
768
753
ht -> nNumUsed = h + 1 ;
@@ -788,8 +773,6 @@ static zend_always_inline zval *_zend_hash_index_add_or_update_i(HashTable *ht,
788
773
p -> key = NULL ;
789
774
ZVAL_COPY_VALUE (& p -> val , pData );
790
775
791
- HANDLE_UNBLOCK_INTERRUPTIONS ();
792
-
793
776
return & p -> val ;
794
777
795
778
convert_to_hash :
@@ -801,12 +784,10 @@ static zend_always_inline zval *_zend_hash_index_add_or_update_i(HashTable *ht,
801
784
return NULL ;
802
785
}
803
786
ZEND_ASSERT (& p -> val != pData );
804
- HANDLE_BLOCK_INTERRUPTIONS ();
805
787
if (ht -> pDestructor ) {
806
788
ht -> pDestructor (& p -> val );
807
789
}
808
790
ZVAL_COPY_VALUE (& p -> val , pData );
809
- HANDLE_UNBLOCK_INTERRUPTIONS ();
810
791
if ((zend_long )h >= (zend_long )ht -> nNextFreeElement ) {
811
792
ht -> nNextFreeElement = h < ZEND_LONG_MAX ? h + 1 : ZEND_LONG_MAX ;
812
793
}
@@ -817,7 +798,6 @@ static zend_always_inline zval *_zend_hash_index_add_or_update_i(HashTable *ht,
817
798
ZEND_HASH_IF_FULL_DO_RESIZE (ht ); /* If the Hash table is full, resize it */
818
799
819
800
add_to_hash :
820
- HANDLE_BLOCK_INTERRUPTIONS ();
821
801
idx = ht -> nNumUsed ++ ;
822
802
ht -> nNumOfElements ++ ;
823
803
if (ht -> nInternalPointer == HT_INVALID_IDX ) {
@@ -834,7 +814,6 @@ static zend_always_inline zval *_zend_hash_index_add_or_update_i(HashTable *ht,
834
814
ZVAL_COPY_VALUE (& p -> val , pData );
835
815
Z_NEXT (p -> val ) = HT_HASH (ht , nIndex );
836
816
HT_HASH (ht , nIndex ) = HT_IDX_TO_HASH (idx );
837
- HANDLE_UNBLOCK_INTERRUPTIONS ();
838
817
839
818
return & p -> val ;
840
819
}
@@ -876,23 +855,19 @@ static void ZEND_FASTCALL zend_hash_do_resize(HashTable *ht)
876
855
HT_ASSERT (GC_REFCOUNT (ht ) == 1 );
877
856
878
857
if (ht -> nNumUsed > ht -> nNumOfElements + (ht -> nNumOfElements >> 5 )) { /* additional term is there to amortize the cost of compaction */
879
- HANDLE_BLOCK_INTERRUPTIONS ();
880
858
zend_hash_rehash (ht );
881
- HANDLE_UNBLOCK_INTERRUPTIONS ();
882
859
} else if (ht -> nTableSize < HT_MAX_SIZE ) { /* Let's double the table size */
883
860
void * new_data , * old_data = HT_GET_DATA_ADDR (ht );
884
861
uint32_t nSize = ht -> nTableSize + ht -> nTableSize ;
885
862
Bucket * old_buckets = ht -> arData ;
886
863
887
- HANDLE_BLOCK_INTERRUPTIONS ();
888
864
new_data = pemalloc (HT_SIZE_EX (nSize , - nSize ), ht -> u .flags & HASH_FLAG_PERSISTENT );
889
865
ht -> nTableSize = nSize ;
890
866
ht -> nTableMask = - ht -> nTableSize ;
891
867
HT_SET_DATA_ADDR (ht , new_data );
892
868
memcpy (ht -> arData , old_buckets , sizeof (Bucket ) * ht -> nNumUsed );
893
869
pefree (old_data , ht -> u .flags & HASH_FLAG_PERSISTENT );
894
870
zend_hash_rehash (ht );
895
- HANDLE_UNBLOCK_INTERRUPTIONS ();
896
871
} else {
897
872
zend_error_noreturn (E_ERROR , "Possible integer overflow in memory allocation (%zu * %zu + %zu)" , ht -> nTableSize * 2 , sizeof (Bucket ) + sizeof (uint32_t ), sizeof (Bucket ));
898
873
}
@@ -984,7 +959,6 @@ ZEND_API int ZEND_FASTCALL zend_hash_rehash(HashTable *ht)
984
959
985
960
static zend_always_inline void _zend_hash_del_el_ex (HashTable * ht , uint32_t idx , Bucket * p , Bucket * prev )
986
961
{
987
- HANDLE_BLOCK_INTERRUPTIONS ();
988
962
if (!(ht -> u .flags & HASH_FLAG_PACKED )) {
989
963
if (prev ) {
990
964
Z_NEXT (prev -> val ) = Z_NEXT (p -> val );
@@ -1027,7 +1001,6 @@ static zend_always_inline void _zend_hash_del_el_ex(HashTable *ht, uint32_t idx,
1027
1001
} else {
1028
1002
ZVAL_UNDEF (& p -> val );
1029
1003
}
1030
- HANDLE_UNBLOCK_INTERRUPTIONS ();
1031
1004
}
1032
1005
1033
1006
static zend_always_inline void _zend_hash_del_el (HashTable * ht , uint32_t idx , Bucket * p )
@@ -2296,7 +2269,6 @@ ZEND_API int ZEND_FASTCALL zend_hash_sort_ex(HashTable *ht, sort_func_t sort, co
2296
2269
(swap_func_t )(renumber ? zend_hash_bucket_renum_swap :
2297
2270
((ht -> u .flags & HASH_FLAG_PACKED ) ? zend_hash_bucket_packed_swap : zend_hash_bucket_swap )));
2298
2271
2299
- HANDLE_BLOCK_INTERRUPTIONS ();
2300
2272
ht -> nNumUsed = i ;
2301
2273
ht -> nInternalPointer = 0 ;
2302
2274
@@ -2333,8 +2305,6 @@ ZEND_API int ZEND_FASTCALL zend_hash_sort_ex(HashTable *ht, sort_func_t sort, co
2333
2305
}
2334
2306
}
2335
2307
2336
- HANDLE_UNBLOCK_INTERRUPTIONS ();
2337
-
2338
2308
return SUCCESS ;
2339
2309
}
2340
2310
0 commit comments