From f86f95abcf78706cdd8aff88d564f385499bad64 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Mon, 24 Jun 2024 15:57:01 +0200 Subject: [PATCH] Compute the size of pages before allocating memory `start_memory_manager()` calls `zend_mm_init()` via `alloc_globals_ctor()` before setting `REAL_PAGE_SIZE` to the right value. Moving the `REAL_PAGE_SIZE` setting block before the call to `alloc_globals_ctor()` makes the allocator behave properly on systems with a page size different than 4k. Suggested-by: arnaud-lb --- Zend/zend_alloc.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Zend/zend_alloc.c b/Zend/zend_alloc.c index 626bbe7b31b34..5e2eec9e63850 100644 --- a/Zend/zend_alloc.c +++ b/Zend/zend_alloc.c @@ -3109,11 +3109,6 @@ static void alloc_globals_dtor(zend_alloc_globals *alloc_globals) ZEND_API void start_memory_manager(void) { -#ifdef ZTS - ts_allocate_fast_id(&alloc_globals_id, &alloc_globals_offset, sizeof(zend_alloc_globals), (ts_allocate_ctor) alloc_globals_ctor, (ts_allocate_dtor) alloc_globals_dtor); -#else - alloc_globals_ctor(&alloc_globals); -#endif #ifndef _WIN32 # if defined(_SC_PAGESIZE) REAL_PAGE_SIZE = sysconf(_SC_PAGESIZE); @@ -3121,6 +3116,11 @@ ZEND_API void start_memory_manager(void) REAL_PAGE_SIZE = sysconf(_SC_PAGE_SIZE); # endif #endif +#ifdef ZTS + ts_allocate_fast_id(&alloc_globals_id, &alloc_globals_offset, sizeof(zend_alloc_globals), (ts_allocate_ctor) alloc_globals_ctor, (ts_allocate_dtor) alloc_globals_dtor); +#else + alloc_globals_ctor(&alloc_globals); +#endif } ZEND_API zend_mm_heap *zend_mm_set_heap(zend_mm_heap *new_heap)