Add zend_getpagesize() and reuse it in accelerator and fiber (#7057)

This commit is contained in:
twosee authored and GitHub committed 2021-05-27 18:27:18 +08:00
1 parent 3c827b3084
commit 795efd7613
4 files changed
+27 -19

No files matched your search

+15
View File
@@ -1205,6 +1205,21 @@ ZEND_API ZEND_COLD ZEND_NORETURN void _zend_bailout(const char *filename, uint32
}
/* }}} */
ZEND_API size_t zend_get_page_size(void)
{
#ifdef _WIN32
SYSTEM_INFO system_info;
GetSystemInfo(&system_info);
return system_info.dwPageSize;
#elif defined(__FreeBSD__)
/* This returns the value obtained from
* the auxv vector, avoiding a syscall. */
return getpagesize();
#else
return (size_t) sysconf(_SC_PAGESIZE);
#endif
}
ZEND_API void zend_append_version_info(const zend_extension *extension) /* {{{ */
{
char *new_info;
+1
View File
@@ -265,6 +265,7 @@ zend_result zend_post_startup(void);
void zend_set_utility_values(zend_utility_values *utility_values);
ZEND_API ZEND_COLD ZEND_NORETURN void _zend_bailout(const char *filename, uint32_t lineno);
ZEND_API size_t zend_get_page_size(void);
ZEND_API size_t zend_vspprintf(char **pbuf, size_t max_len, const char *format, va_list ap);
ZEND_API size_t zend_spprintf(char **message, size_t max_len, const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 3, 4);
+9 -11
View File
@@ -90,27 +90,25 @@ extern transfer_t jump_fcontext(fcontext_t to, void *vp);
# define ZEND_FIBER_STACK_FLAGS (MAP_PRIVATE | MAP_ANON)
#endif
static size_t zend_fiber_page_size()
static size_t zend_fiber_get_page_size(void)
{
#if _POSIX_MAPPED_FILES
static size_t page_size;
static size_t page_size = 0;
if (!page_size) {
page_size = sysconf(_SC_PAGESIZE);
page_size = zend_get_page_size();
if (!page_size || (page_size & (page_size - 1))) {
/* anyway, we have to return a valid result */
page_size = ZEND_FIBER_DEFAULT_PAGE_SIZE;
}
}
return page_size;
#else
return ZEND_FIBER_DEFAULT_PAGE_SIZE;
#endif
}
static bool zend_fiber_stack_allocate(zend_fiber_stack *stack, size_t size)
{
void *pointer;
const size_t page_size = zend_fiber_page_size();
const size_t page_size = zend_fiber_get_page_size();
ZEND_ASSERT(size >= page_size + ZEND_FIBER_GUARD_PAGES * page_size);
@@ -167,7 +165,7 @@ static void zend_fiber_stack_free(zend_fiber_stack *stack)
VALGRIND_STACK_DEREGISTER(stack->valgrind);
#endif
const size_t page_size = zend_fiber_page_size();
const size_t page_size = zend_fiber_get_page_size();
void *pointer = (void *) ((uintptr_t) stack->pointer - ZEND_FIBER_GUARD_PAGES * page_size);
+2 -8
View File
@@ -3171,14 +3171,8 @@ static zend_result accel_post_startup(void)
&& zend_jit_check_support() == SUCCESS) {
size_t page_size;
# ifdef _WIN32
SYSTEM_INFO system_info;
GetSystemInfo(&system_info);
page_size = system_info.dwPageSize;
# else
page_size = getpagesize();
# endif
if (!page_size || (page_size & (page_size - 1))) {
page_size = zend_get_page_size();
if (!page_size && (page_size & (page_size - 1))) {
zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Failure to initialize shared memory structures - can't get page size.");
abort();
}