Skip to content

Commit eea05e6

Browse files
cleanup
1 parent 9f9462f commit eea05e6

3 files changed

Lines changed: 56 additions & 45 deletions

File tree

Zend/zend_alloc.c

Lines changed: 54 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@
5050
* with more specialized routines when the requested size is known.
5151
*/
5252

53-
#include "php.h"
5453
#include "zend.h"
5554
#include "zend_alloc.h"
5655
#include "zend_globals.h"
@@ -240,6 +239,8 @@ struct _zend_mm_observer {
240239
zend_mm_observer *next;
241240
};
242241

242+
static void zend_mm_observers_shutdown(zend_mm_heap *heap);
243+
243244
#define HANDLE_OBSERVERS(observer_function, ...) \
244245
if (use_custom_heap & ZEND_MM_CUSTOM_HEAP_OBSERVED) { \
245246
zend_mm_observer *current = heap->observers; \
@@ -2480,7 +2481,6 @@ ZEND_API void zend_mm_shutdown(zend_mm_heap *heap, bool full, bool silent)
24802481
zend_mm_chunk *p;
24812482
zend_mm_huge_list *list;
24822483

2483-
// Call observer shutdown callbacks before cleaning up
24842484
#if ZEND_MM_CUSTOM
24852485
if (heap->use_custom_heap & ZEND_MM_CUSTOM_HEAP_OBSERVED) {
24862486
zend_mm_observer *current = heap->observers;
@@ -2490,14 +2490,9 @@ ZEND_API void zend_mm_shutdown(zend_mm_heap *heap, bool full, bool silent)
24902490
}
24912491
current = current->next;
24922492
}
2493-
}
2494-
#endif
2495-
2496-
if (full == false) {
24972493
zend_mm_observers_shutdown(heap);
24982494
}
24992495

2500-
#if ZEND_MM_CUSTOM
25012496
if (heap->use_custom_heap & ~ZEND_MM_CUSTOM_HEAP_OBSERVED) {
25022497
if (heap->custom_heap._malloc == tracked_malloc) {
25032498
if (silent) {
@@ -2651,7 +2646,7 @@ void* ZEND_FASTCALL _zend_mm_realloc2(zend_mm_heap *heap, void *ptr, size_t size
26512646
ZEND_API size_t ZEND_FASTCALL _zend_mm_block_size(zend_mm_heap *heap, void *ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
26522647
{
26532648
#if ZEND_MM_CUSTOM
2654-
if (UNEXPECTED(heap->use_custom_heap)) {
2649+
if (UNEXPECTED(heap->use_custom_heap & ~ZEND_MM_CUSTOM_HEAP_OBSERVED)) {
26552650
if (heap->custom_heap._malloc == tracked_malloc) {
26562651
zend_ulong h = ((uintptr_t) ptr) >> ZEND_MM_ALIGNMENT_LOG2;
26572652
zval *size_zv = zend_hash_index_find(heap->tracked_allocs, h);
@@ -2734,14 +2729,45 @@ ZEND_API bool is_zend_ptr(const void *ptr)
27342729
#undef _emalloc
27352730

27362731
#if ZEND_MM_CUSTOM
2732+
static ZEND_COLD void* ZEND_FASTCALL zend_mm_alloc_custom(size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
2733+
{
2734+
zend_mm_heap *heap = AG(mm_heap);
2735+
int use_custom_heap = heap->use_custom_heap;
2736+
void *ptr;
2737+
2738+
if (use_custom_heap & ~ZEND_MM_CUSTOM_HEAP_OBSERVED) {
2739+
ptr = heap->custom_heap._malloc(size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
2740+
} else {
2741+
ptr = zend_mm_alloc_heap(heap, size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
2742+
}
2743+
2744+
HANDLE_OBSERVERS(malloc, size, ptr)
2745+
2746+
return ptr;
2747+
}
2748+
2749+
static ZEND_COLD void ZEND_FASTCALL zend_mm_free_custom(void *ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
2750+
{
2751+
zend_mm_heap *heap = AG(mm_heap);
2752+
int use_custom_heap = heap->use_custom_heap;
2753+
2754+
HANDLE_OBSERVERS(free, ptr)
2755+
2756+
if (use_custom_heap & ~ZEND_MM_CUSTOM_HEAP_OBSERVED) {
2757+
heap->custom_heap._free(ptr ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
2758+
} else {
2759+
zend_mm_free_heap(heap, ptr ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
2760+
}
2761+
}
2762+
27372763
# define ZEND_MM_CUSTOM_ALLOCATOR(size) do { \
2738-
if (UNEXPECTED(AG(mm_heap)->use_custom_heap & ~ZEND_MM_CUSTOM_HEAP_OBSERVED)) { \
2739-
return AG(mm_heap)->custom_heap._malloc(size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC); \
2764+
if (UNEXPECTED(AG(mm_heap)->use_custom_heap)) { \
2765+
return zend_mm_alloc_custom(size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC); \
27402766
} \
27412767
} while (0)
27422768
# define ZEND_MM_CUSTOM_DEALLOCATOR(ptr) do { \
2743-
if (UNEXPECTED(AG(mm_heap)->use_custom_heap & ~ZEND_MM_CUSTOM_HEAP_OBSERVED)) { \
2744-
AG(mm_heap)->custom_heap._free(ptr ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC); \
2769+
if (UNEXPECTED(AG(mm_heap)->use_custom_heap)) { \
2770+
zend_mm_free_custom(ptr ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC); \
27452771
return; \
27462772
} \
27472773
} while (0)
@@ -2842,15 +2868,15 @@ ZEND_API void* ZEND_FASTCALL _emalloc(size_t size ZEND_FILE_LINE_DC ZEND_FILE_LI
28422868
if (UNEXPECTED(use_custom_heap)) {
28432869
void *ptr;
28442870

2845-
// Check for actual custom handler (excluding observer bit)
2871+
/* Check for actual custom handler (excluding observer bit) */
28462872
if (use_custom_heap & ~ZEND_MM_CUSTOM_HEAP_OBSERVED) {
28472873
ptr = heap->custom_heap._malloc(size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
28482874
} else {
2849-
// No custom handler, use default heap
2875+
/* No custom handler, use default heap */
28502876
ptr = zend_mm_alloc_heap(heap, size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
28512877
}
28522878

2853-
// Call observers if present
2879+
/* Call observers if present */
28542880
HANDLE_OBSERVERS(malloc, size, ptr)
28552881

28562882
return ptr;
@@ -2866,14 +2892,14 @@ ZEND_API void ZEND_FASTCALL _efree(void *ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_OR
28662892
int use_custom_heap = heap->use_custom_heap;
28672893

28682894
if (UNEXPECTED(use_custom_heap)) {
2869-
// Call observers first (before free)
2895+
/* Call observers first (before free) */
28702896
HANDLE_OBSERVERS(free, ptr)
28712897

2872-
// Check for actual custom handler (excluding observer bit)
2898+
/* Check for actual custom handler (excluding observer bit) */
28732899
if (use_custom_heap & ~ZEND_MM_CUSTOM_HEAP_OBSERVED) {
28742900
heap->custom_heap._free(ptr ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
28752901
} else {
2876-
// No custom handler, use default heap
2902+
/* No custom handler, use default heap */
28772903
zend_mm_free_heap(heap, ptr ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
28782904
}
28792905
return;
@@ -2891,15 +2917,15 @@ ZEND_API void* ZEND_FASTCALL _erealloc(void *ptr, size_t size ZEND_FILE_LINE_DC
28912917
if (UNEXPECTED(use_custom_heap)) {
28922918
void *new_ptr;
28932919

2894-
// Check for actual custom handler (excluding observer bit)
2920+
/* Check for actual custom handler (excluding observer bit) */
28952921
if (use_custom_heap & ~ZEND_MM_CUSTOM_HEAP_OBSERVED) {
28962922
new_ptr = heap->custom_heap._realloc(ptr, size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
28972923
} else {
2898-
// No custom handler, use default heap
2924+
/* No custom handler, use default heap */
28992925
new_ptr = zend_mm_realloc_heap(heap, ptr, size, 0, size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
29002926
}
29012927

2902-
// Call observers if present
2928+
/* Call observers if present */
29032929
HANDLE_OBSERVERS(realloc, ptr, size, new_ptr)
29042930

29052931
return new_ptr;
@@ -2917,15 +2943,15 @@ ZEND_API void* ZEND_FASTCALL _erealloc2(void *ptr, size_t size, size_t copy_size
29172943
if (UNEXPECTED(use_custom_heap)) {
29182944
void *new_ptr;
29192945

2920-
// Check for actual custom handler (excluding observer bit)
2946+
/* Check for actual custom handler (excluding observer bit) */
29212947
if (use_custom_heap & ~ZEND_MM_CUSTOM_HEAP_OBSERVED) {
29222948
new_ptr = heap->custom_heap._realloc(ptr, size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
29232949
} else {
2924-
// No custom handler, use default heap
2950+
/* No custom handler, use default heap */
29252951
new_ptr = zend_mm_realloc_heap(heap, ptr, size, 1, copy_size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
29262952
}
29272953

2928-
// Call observers if present
2954+
/* Call observers if present */
29292955
HANDLE_OBSERVERS(realloc, ptr, size, new_ptr)
29302956

29312957
return new_ptr;
@@ -3443,7 +3469,6 @@ static void alloc_globals_ctor(zend_alloc_globals *alloc_globals)
34433469
#ifdef ZTS
34443470
static void alloc_globals_dtor(zend_alloc_globals *alloc_globals)
34453471
{
3446-
zend_mm_observers_shutdown(alloc_globals->mm_heap);
34473472
zend_mm_shutdown(alloc_globals->mm_heap, 1, 1);
34483473
}
34493474
#endif
@@ -3645,7 +3670,7 @@ ZEND_API bool zend_mm_observer_unregister(zend_mm_heap *heap, zend_mm_observer *
36453670
}
36463671
pefree(current, 1);
36473672

3648-
// Update flag if no more observers
3673+
/* Update flag if no more observers */
36493674
if (heap->observers == NULL) {
36503675
heap->use_custom_heap &= ~ZEND_MM_CUSTOM_HEAP_OBSERVED;
36513676
}
@@ -3658,16 +3683,9 @@ ZEND_API bool zend_mm_observer_unregister(zend_mm_heap *heap, zend_mm_observer *
36583683
return false;
36593684
}
36603685

3661-
void zend_mm_observers_shutdown(zend_mm_heap *heap)
3686+
static void zend_mm_observers_shutdown(zend_mm_heap *heap)
36623687
{
36633688
#if ZEND_MM_CUSTOM
3664-
if (heap == NULL) {
3665-
heap = AG(mm_heap);
3666-
if (heap == NULL) {
3667-
return;
3668-
}
3669-
}
3670-
36713689
zend_mm_observer *current = heap->observers;
36723690
zend_mm_observer *next = NULL;
36733691

@@ -3681,6 +3699,7 @@ void zend_mm_observers_shutdown(zend_mm_heap *heap)
36813699
heap->use_custom_heap &= ~ZEND_MM_CUSTOM_HEAP_OBSERVED;
36823700
#endif
36833701
}
3702+
36843703
ZEND_API zend_mm_storage *zend_mm_get_storage(zend_mm_heap *heap)
36853704
{
36863705
#if ZEND_MM_STORAGE
@@ -3745,6 +3764,7 @@ ZEND_API zend_mm_heap *zend_mm_startup_ex(const zend_mm_handlers *handlers, void
37453764
#endif
37463765
#if ZEND_MM_CUSTOM
37473766
heap->use_custom_heap = 0;
3767+
heap->observers = NULL;
37483768
#endif
37493769
heap->storage = &tmp_storage;
37503770
heap->huge_list = NULL;

Zend/zend_alloc.h

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,6 @@ ZEND_API void zend_mm_get_custom_handlers_ex(zend_mm_heap *heap,
297297

298298
typedef struct _zend_mm_observer zend_mm_observer;
299299

300-
// thread local
301300
ZEND_API bool zend_mm_is_observed(zend_mm_heap *heap);
302301
ZEND_API zend_mm_observer* zend_mm_observer_register(
303302
zend_mm_heap *heap,
@@ -308,14 +307,6 @@ ZEND_API zend_mm_observer* zend_mm_observer_register(
308307
void (*shutdown)(bool full, bool silent)
309308
);
310309
ZEND_API bool zend_mm_observer_unregister(zend_mm_heap *heap, zend_mm_observer *observer);
311-
void zend_mm_observers_shutdown(zend_mm_heap *heap);
312-
313-
#if ZEND_DEBUG
314-
ZEND_API void zend_mm_set_custom_debug_handlers(zend_mm_heap *heap,
315-
void* (*_malloc)(size_t ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC),
316-
void (*_free)(void* ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC),
317-
void* (*_realloc)(void*, size_t ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC));
318-
#endif
319310

320311
typedef struct _zend_mm_storage zend_mm_storage;
321312

ext/zend_test/zend_mm_observer.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,8 @@ static PHP_INI_MH(OnUpdateZendTestMMObserverEnabled)
7171

7272
int int_value = zend_ini_parse_bool(new_value);
7373

74-
// Only toggle observer during runtime (ini_set during active request)
75-
// RINIT/RSHUTDOWN handle initialization and cleanup
74+
/* Only toggle observer during runtime (ini_set during active request).
75+
* RINIT/RSHUTDOWN handle initialization and cleanup. */
7676
if (stage == PHP_INI_STAGE_RUNTIME) {
7777
if (int_value == 1) {
7878
if (ZT_G(observer) == NULL) {

0 commit comments

Comments
 (0)