@@ -268,17 +268,10 @@ struct _zend_mm_heap {
268
268
int last_chunks_delete_boundary ; /* number of chunks after last deletion */
269
269
int last_chunks_delete_count ; /* number of deletion over the last boundary */
270
270
#if ZEND_MM_CUSTOM
271
- union {
272
- struct {
273
- void * (* _malloc )(size_t );
274
- void (* _free )(void * );
275
- void * (* _realloc )(void * , size_t );
276
- } std ;
277
- struct {
278
- void * (* _malloc )(size_t ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC );
279
- void (* _free )(void * ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC );
280
- void * (* _realloc )(void * , size_t ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC );
281
- } debug ;
271
+ struct {
272
+ void * (* _malloc )(size_t ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC );
273
+ void (* _free )(void * ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC );
274
+ void * (* _realloc )(void * , size_t ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC );
282
275
} custom_heap ;
283
276
HashTable * tracked_allocs ;
284
277
#endif
@@ -2261,7 +2254,7 @@ static void zend_mm_check_leaks(zend_mm_heap *heap)
2261
2254
#endif
2262
2255
2263
2256
#if ZEND_MM_CUSTOM
2264
- static void * tracked_malloc (size_t size );
2257
+ static void * tracked_malloc (size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC );
2265
2258
static void tracked_free_all (void );
2266
2259
#endif
2267
2260
@@ -2272,7 +2265,7 @@ void zend_mm_shutdown(zend_mm_heap *heap, bool full, bool silent)
2272
2265
2273
2266
#if ZEND_MM_CUSTOM
2274
2267
if (heap -> use_custom_heap ) {
2275
- if (heap -> custom_heap .std . _malloc == tracked_malloc ) {
2268
+ if (heap -> custom_heap ._malloc == tracked_malloc ) {
2276
2269
if (silent ) {
2277
2270
tracked_free_all ();
2278
2271
}
@@ -2281,17 +2274,13 @@ void zend_mm_shutdown(zend_mm_heap *heap, bool full, bool silent)
2281
2274
zend_hash_destroy (heap -> tracked_allocs );
2282
2275
free (heap -> tracked_allocs );
2283
2276
/* Make sure the heap free below does not use tracked_free(). */
2284
- heap -> custom_heap .std . _free = free ;
2277
+ heap -> custom_heap ._free = __zend_free ;
2285
2278
}
2286
2279
heap -> size = 0 ;
2287
2280
}
2288
2281
2289
2282
if (full ) {
2290
- if (ZEND_DEBUG && heap -> use_custom_heap == ZEND_MM_CUSTOM_HEAP_DEBUG ) {
2291
- heap -> custom_heap .debug ._free (heap ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC );
2292
- } else {
2293
- heap -> custom_heap .std ._free (heap );
2294
- }
2283
+ heap -> custom_heap ._free (heap ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC );
2295
2284
}
2296
2285
return ;
2297
2286
}
@@ -2412,7 +2401,7 @@ ZEND_API size_t ZEND_FASTCALL _zend_mm_block_size(zend_mm_heap *heap, void *ptr
2412
2401
{
2413
2402
#if ZEND_MM_CUSTOM
2414
2403
if (UNEXPECTED (heap -> use_custom_heap )) {
2415
- if (heap -> custom_heap .std . _malloc == tracked_malloc ) {
2404
+ if (heap -> custom_heap ._malloc == tracked_malloc ) {
2416
2405
zend_ulong h = ((uintptr_t ) ptr ) >> ZEND_MM_ALIGNMENT_LOG2 ;
2417
2406
zval * size_zv = zend_hash_index_find (heap -> tracked_allocs , h );
2418
2407
if (size_zv ) {
@@ -2455,7 +2444,7 @@ ZEND_API bool is_zend_ptr(const void *ptr)
2455
2444
{
2456
2445
#if ZEND_MM_CUSTOM
2457
2446
if (AG (mm_heap )-> use_custom_heap ) {
2458
- if (AG (mm_heap )-> custom_heap .std . _malloc == tracked_malloc ) {
2447
+ if (AG (mm_heap )-> custom_heap ._malloc == tracked_malloc ) {
2459
2448
zend_ulong h = ((uintptr_t ) ptr ) >> ZEND_MM_ALIGNMENT_LOG2 ;
2460
2449
zval * size_zv = zend_hash_index_find (AG (mm_heap )-> tracked_allocs , h );
2461
2450
if (size_zv ) {
@@ -2492,48 +2481,18 @@ ZEND_API bool is_zend_ptr(const void *ptr)
2492
2481
return 0 ;
2493
2482
}
2494
2483
2495
- #if ZEND_MM_CUSTOM
2496
-
2497
- static ZEND_COLD void * ZEND_FASTCALL _malloc_custom (size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC )
2498
- {
2499
- if (ZEND_DEBUG && AG (mm_heap )-> use_custom_heap == ZEND_MM_CUSTOM_HEAP_DEBUG ) {
2500
- return AG (mm_heap )-> custom_heap .debug ._malloc (size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC );
2501
- } else {
2502
- return AG (mm_heap )-> custom_heap .std ._malloc (size );
2503
- }
2504
- }
2505
-
2506
- static ZEND_COLD void ZEND_FASTCALL _efree_custom (void * ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC )
2507
- {
2508
- if (ZEND_DEBUG && AG (mm_heap )-> use_custom_heap == ZEND_MM_CUSTOM_HEAP_DEBUG ) {
2509
- AG (mm_heap )-> custom_heap .debug ._free (ptr ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC );
2510
- } else {
2511
- AG (mm_heap )-> custom_heap .std ._free (ptr );
2512
- }
2513
- }
2514
-
2515
- static ZEND_COLD void * ZEND_FASTCALL _realloc_custom (void * ptr , size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC )
2516
- {
2517
- if (ZEND_DEBUG && AG (mm_heap )-> use_custom_heap == ZEND_MM_CUSTOM_HEAP_DEBUG ) {
2518
- return AG (mm_heap )-> custom_heap .debug ._realloc (ptr , size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC );
2519
- } else {
2520
- return AG (mm_heap )-> custom_heap .std ._realloc (ptr , size );
2521
- }
2522
- }
2523
- #endif
2524
-
2525
2484
#if !ZEND_DEBUG && defined(HAVE_BUILTIN_CONSTANT_P )
2526
2485
#undef _emalloc
2527
2486
2528
2487
#if ZEND_MM_CUSTOM
2529
2488
# define ZEND_MM_CUSTOM_ALLOCATOR (size ) do { \
2530
2489
if (UNEXPECTED(AG(mm_heap)->use_custom_heap)) { \
2531
- return _malloc_custom (size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC); \
2490
+ return AG(mm_heap)->custom_heap._malloc (size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC); \
2532
2491
} \
2533
2492
} while (0)
2534
2493
# define ZEND_MM_CUSTOM_DEALLOCATOR (ptr ) do { \
2535
2494
if (UNEXPECTED(AG(mm_heap)->use_custom_heap)) { \
2536
- _efree_custom (ptr ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC); \
2495
+ AG(mm_heap)->custom_heap._free (ptr ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC); \
2537
2496
return; \
2538
2497
} \
2539
2498
} while (0)
@@ -2618,7 +2577,7 @@ ZEND_API void* ZEND_FASTCALL _emalloc(size_t size ZEND_FILE_LINE_DC ZEND_FILE_LI
2618
2577
{
2619
2578
#if ZEND_MM_CUSTOM
2620
2579
if (UNEXPECTED (AG (mm_heap )-> use_custom_heap )) {
2621
- return _malloc_custom ( size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC );
2580
+ return AG ( mm_heap ) -> custom_heap . _malloc ( size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC ); \
2622
2581
}
2623
2582
#endif
2624
2583
return zend_mm_alloc_heap (AG (mm_heap ), size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC );
@@ -2628,7 +2587,7 @@ ZEND_API void ZEND_FASTCALL _efree(void *ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_OR
2628
2587
{
2629
2588
#if ZEND_MM_CUSTOM
2630
2589
if (UNEXPECTED (AG (mm_heap )-> use_custom_heap )) {
2631
- _efree_custom (ptr ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC );
2590
+ AG ( mm_heap ) -> custom_heap . _free (ptr ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC );
2632
2591
return ;
2633
2592
}
2634
2593
#endif
@@ -2639,7 +2598,7 @@ ZEND_API void* ZEND_FASTCALL _erealloc(void *ptr, size_t size ZEND_FILE_LINE_DC
2639
2598
{
2640
2599
#if ZEND_MM_CUSTOM
2641
2600
if (UNEXPECTED (AG (mm_heap )-> use_custom_heap )) {
2642
- return _realloc_custom (ptr , size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC );
2601
+ return AG ( mm_heap ) -> custom_heap . _realloc (ptr , size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC );
2643
2602
}
2644
2603
#endif
2645
2604
return zend_mm_realloc_heap (AG (mm_heap ), ptr , size , 0 , size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC );
@@ -2649,7 +2608,7 @@ ZEND_API void* ZEND_FASTCALL _erealloc2(void *ptr, size_t size, size_t copy_size
2649
2608
{
2650
2609
#if ZEND_MM_CUSTOM
2651
2610
if (UNEXPECTED (AG (mm_heap )-> use_custom_heap )) {
2652
- return _realloc_custom (ptr , size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC );
2611
+ return AG ( mm_heap ) -> custom_heap . _realloc (ptr , size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC );
2653
2612
}
2654
2613
#endif
2655
2614
return zend_mm_realloc_heap (AG (mm_heap ), ptr , size , 1 , copy_size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC );
@@ -2844,7 +2803,7 @@ static zend_always_inline void tracked_check_limit(zend_mm_heap *heap, size_t ad
2844
2803
}
2845
2804
}
2846
2805
2847
- static void * tracked_malloc (size_t size )
2806
+ static void * tracked_malloc (size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC )
2848
2807
{
2849
2808
zend_mm_heap * heap = AG (mm_heap );
2850
2809
tracked_check_limit (heap , size );
@@ -2859,7 +2818,7 @@ static void *tracked_malloc(size_t size)
2859
2818
return ptr ;
2860
2819
}
2861
2820
2862
- static void tracked_free (void * ptr ) {
2821
+ static void tracked_free (void * ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC ) {
2863
2822
if (!ptr ) {
2864
2823
return ;
2865
2824
}
@@ -2871,7 +2830,7 @@ static void tracked_free(void *ptr) {
2871
2830
free (ptr );
2872
2831
}
2873
2832
2874
- static void * tracked_realloc (void * ptr , size_t new_size ) {
2833
+ static void * tracked_realloc (void * ptr , size_t new_size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC ) {
2875
2834
zend_mm_heap * heap = AG (mm_heap );
2876
2835
zval * old_size_zv = NULL ;
2877
2836
size_t old_size = 0 ;
@@ -2889,7 +2848,7 @@ static void *tracked_realloc(void *ptr, size_t new_size) {
2889
2848
zend_hash_del_bucket (heap -> tracked_allocs , (Bucket * ) old_size_zv );
2890
2849
}
2891
2850
2892
- ptr = __zend_realloc (ptr , new_size );
2851
+ ptr = __zend_realloc (ptr , new_size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC );
2893
2852
tracked_add (heap , ptr , new_size );
2894
2853
heap -> size += new_size - old_size ;
2895
2854
return ptr ;
@@ -2921,14 +2880,14 @@ static void alloc_globals_ctor(zend_alloc_globals *alloc_globals)
2921
2880
2922
2881
if (!tracked ) {
2923
2882
/* Use system allocator. */
2924
- mm_heap -> custom_heap .std . _malloc = __zend_malloc ;
2925
- mm_heap -> custom_heap .std . _free = free ;
2926
- mm_heap -> custom_heap .std . _realloc = __zend_realloc ;
2883
+ mm_heap -> custom_heap ._malloc = __zend_malloc ;
2884
+ mm_heap -> custom_heap ._free = __zend_free ;
2885
+ mm_heap -> custom_heap ._realloc = __zend_realloc ;
2927
2886
} else {
2928
2887
/* Use system allocator and track allocations for auto-free. */
2929
- mm_heap -> custom_heap .std . _malloc = tracked_malloc ;
2930
- mm_heap -> custom_heap .std . _free = tracked_free ;
2931
- mm_heap -> custom_heap .std . _realloc = tracked_realloc ;
2888
+ mm_heap -> custom_heap ._malloc = tracked_malloc ;
2889
+ mm_heap -> custom_heap ._free = tracked_free ;
2890
+ mm_heap -> custom_heap ._realloc = tracked_realloc ;
2932
2891
mm_heap -> tracked_allocs = malloc (sizeof (HashTable ));
2933
2892
zend_hash_init (mm_heap -> tracked_allocs , 1024 , NULL , NULL , 1 );
2934
2893
}
@@ -2990,9 +2949,9 @@ ZEND_API bool zend_mm_is_custom_heap(zend_mm_heap *new_heap)
2990
2949
}
2991
2950
2992
2951
ZEND_API void zend_mm_set_custom_handlers (zend_mm_heap * heap ,
2993
- void * (* _malloc )(size_t ),
2994
- void (* _free )(void * ),
2995
- void * (* _realloc )(void * , size_t ))
2952
+ void * (* _malloc )(size_t ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC ),
2953
+ void (* _free )(void * ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC ),
2954
+ void * (* _realloc )(void * , size_t ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC ))
2996
2955
{
2997
2956
#if ZEND_MM_CUSTOM
2998
2957
zend_mm_heap * _heap = (zend_mm_heap * )heap ;
@@ -3001,25 +2960,25 @@ ZEND_API void zend_mm_set_custom_handlers(zend_mm_heap *heap,
3001
2960
_heap -> use_custom_heap = ZEND_MM_CUSTOM_HEAP_NONE ;
3002
2961
} else {
3003
2962
_heap -> use_custom_heap = ZEND_MM_CUSTOM_HEAP_STD ;
3004
- _heap -> custom_heap .std . _malloc = _malloc ;
3005
- _heap -> custom_heap .std . _free = _free ;
3006
- _heap -> custom_heap .std . _realloc = _realloc ;
2963
+ _heap -> custom_heap ._malloc = _malloc ;
2964
+ _heap -> custom_heap ._free = _free ;
2965
+ _heap -> custom_heap ._realloc = _realloc ;
3007
2966
}
3008
2967
#endif
3009
2968
}
3010
2969
3011
2970
ZEND_API void zend_mm_get_custom_handlers (zend_mm_heap * heap ,
3012
- void * (* * _malloc )(size_t ),
3013
- void (* * _free )(void * ),
3014
- void * (* * _realloc )(void * , size_t ))
2971
+ void * (* * _malloc )(size_t ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC ),
2972
+ void (* * _free )(void * ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC ),
2973
+ void * (* * _realloc )(void * , size_t ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC ))
3015
2974
{
3016
2975
#if ZEND_MM_CUSTOM
3017
2976
zend_mm_heap * _heap = (zend_mm_heap * )heap ;
3018
2977
3019
2978
if (heap -> use_custom_heap ) {
3020
- * _malloc = _heap -> custom_heap .std . _malloc ;
3021
- * _free = _heap -> custom_heap .std . _free ;
3022
- * _realloc = _heap -> custom_heap .std . _realloc ;
2979
+ * _malloc = _heap -> custom_heap ._malloc ;
2980
+ * _free = _heap -> custom_heap ._free ;
2981
+ * _realloc = _heap -> custom_heap ._realloc ;
3023
2982
} else {
3024
2983
* _malloc = NULL ;
3025
2984
* _free = NULL ;
@@ -3032,23 +2991,6 @@ ZEND_API void zend_mm_get_custom_handlers(zend_mm_heap *heap,
3032
2991
#endif
3033
2992
}
3034
2993
3035
- #if ZEND_DEBUG
3036
- ZEND_API void zend_mm_set_custom_debug_handlers (zend_mm_heap * heap ,
3037
- void * (* _malloc )(size_t ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC ),
3038
- void (* _free )(void * ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC ),
3039
- void * (* _realloc )(void * , size_t ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC ))
3040
- {
3041
- #if ZEND_MM_CUSTOM
3042
- zend_mm_heap * _heap = (zend_mm_heap * )heap ;
3043
-
3044
- _heap -> use_custom_heap = ZEND_MM_CUSTOM_HEAP_DEBUG ;
3045
- _heap -> custom_heap .debug ._malloc = _malloc ;
3046
- _heap -> custom_heap .debug ._free = _free ;
3047
- _heap -> custom_heap .debug ._realloc = _realloc ;
3048
- #endif
3049
- }
3050
- #endif
3051
-
3052
2994
ZEND_API zend_mm_storage * zend_mm_get_storage (zend_mm_heap * heap )
3053
2995
{
3054
2996
#if ZEND_MM_STORAGE
@@ -3134,7 +3076,7 @@ ZEND_API zend_mm_heap *zend_mm_startup_ex(const zend_mm_handlers *handlers, void
3134
3076
#endif
3135
3077
}
3136
3078
3137
- ZEND_API void * __zend_malloc (size_t len )
3079
+ ZEND_API void * __zend_malloc (size_t len ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC )
3138
3080
{
3139
3081
void * tmp = malloc (len );
3140
3082
if (EXPECTED (tmp || !len )) {
@@ -3143,17 +3085,17 @@ ZEND_API void * __zend_malloc(size_t len)
3143
3085
zend_out_of_memory ();
3144
3086
}
3145
3087
3146
- ZEND_API void * __zend_calloc (size_t nmemb , size_t len )
3088
+ ZEND_API void * __zend_calloc (size_t nmemb , size_t len ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC )
3147
3089
{
3148
3090
void * tmp ;
3149
3091
3150
3092
len = zend_safe_address_guarded (nmemb , len , 0 );
3151
- tmp = __zend_malloc (len );
3093
+ tmp = __zend_malloc (len ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC );
3152
3094
memset (tmp , 0 , len );
3153
3095
return tmp ;
3154
3096
}
3155
3097
3156
- ZEND_API void * __zend_realloc (void * p , size_t len )
3098
+ ZEND_API void * __zend_realloc (void * p , size_t len ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC )
3157
3099
{
3158
3100
p = realloc (p , len );
3159
3101
if (EXPECTED (p || !len )) {
@@ -3162,6 +3104,12 @@ ZEND_API void * __zend_realloc(void *p, size_t len)
3162
3104
zend_out_of_memory ();
3163
3105
}
3164
3106
3107
+ ZEND_API void __zend_free (void * p ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC )
3108
+ {
3109
+ free (p );
3110
+ return ;
3111
+ }
3112
+
3165
3113
ZEND_API char * __zend_strdup (const char * s )
3166
3114
{
3167
3115
char * tmp = strdup (s );
0 commit comments