Skip to content

Commit 0123a94

Browse files
committed
Switch function in constant to actual function
1 parent cceca34 commit 0123a94

File tree

3 files changed

+31
-19
lines changed

3 files changed

+31
-19
lines changed

Zend/zend_fibers.c

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -100,12 +100,13 @@ zend_always_inline static void zend_observer_fiber_switch_notify(zend_fiber *fro
100100

101101
static zend_bool zend_fiber_stack_allocate(zend_fiber_stack *stack, size_t size) /* {{{ */
102102
{
103-
ZEND_ASSERT(size >= ZEND_FIBER_PAGESIZE + ZEND_FIBER_GUARD_PAGES * ZEND_FIBER_PAGESIZE);
104-
105103
void *pointer;
104+
const size_t page_size = zend_fiber_page_size();
105+
106+
ZEND_ASSERT(size >= page_size + ZEND_FIBER_GUARD_PAGES * page_size);
106107

107-
stack->size = (size + ZEND_FIBER_PAGESIZE - 1) / ZEND_FIBER_PAGESIZE * ZEND_FIBER_PAGESIZE;
108-
size_t msize = stack->size + ZEND_FIBER_GUARD_PAGES * ZEND_FIBER_PAGESIZE;
108+
stack->size = (size + page_size - 1) / page_size * page_size;
109+
const size_t msize = stack->size + ZEND_FIBER_GUARD_PAGES * page_size;
109110

110111
#ifdef PHP_WIN32
111112
pointer = VirtualAlloc(0, msize, MEM_COMMIT, PAGE_READWRITE);
@@ -117,7 +118,7 @@ static zend_bool zend_fiber_stack_allocate(zend_fiber_stack *stack, size_t size)
117118
# if ZEND_FIBER_GUARD_PAGES
118119
DWORD protect;
119120

120-
if (!VirtualProtect(pointer, ZEND_FIBER_GUARD_PAGES * ZEND_FIBER_PAGESIZE, PAGE_READWRITE | PAGE_GUARD, &protect)) {
121+
if (!VirtualProtect(pointer, ZEND_FIBER_GUARD_PAGES * page_size, PAGE_READWRITE | PAGE_GUARD, &protect)) {
121122
VirtualFree(pointer, 0, MEM_RELEASE);
122123
return 0;
123124
}
@@ -130,18 +131,18 @@ static zend_bool zend_fiber_stack_allocate(zend_fiber_stack *stack, size_t size)
130131
}
131132

132133
# if ZEND_FIBER_GUARD_PAGES
133-
if (mprotect(pointer, ZEND_FIBER_GUARD_PAGES * ZEND_FIBER_PAGESIZE, PROT_NONE) < 0) {
134+
if (mprotect(pointer, ZEND_FIBER_GUARD_PAGES * page_size, PROT_NONE) < 0) {
134135
munmap(pointer, msize);
135136
return 0;
136137
}
137138
# endif
138139
#endif
139140

140-
stack->pointer = (void *) ((uintptr_t) pointer + ZEND_FIBER_GUARD_PAGES * ZEND_FIBER_PAGESIZE);
141+
stack->pointer = (void *) ((uintptr_t) pointer + ZEND_FIBER_GUARD_PAGES * page_size);
141142

142143
#ifdef VALGRIND_STACK_REGISTER
143144
uintptr_t base = (uintptr_t) stack->pointer;
144-
stack->valgrind = VALGRIND_STACK_REGISTER(base, base + msize - ZEND_FIBER_GUARD_PAGES * ZEND_FIBER_PAGESIZE);
145+
stack->valgrind = VALGRIND_STACK_REGISTER(base, base + msize - ZEND_FIBER_GUARD_PAGES * page_size);
145146
#endif
146147

147148
return 1;
@@ -158,14 +159,14 @@ void zend_fiber_stack_free(zend_fiber_stack *stack) /* {{{ */
158159
VALGRIND_STACK_DEREGISTER(stack->valgrind);
159160
#endif
160161

161-
void *pointer = (void *) ((uintptr_t) stack->pointer - ZEND_FIBER_GUARD_PAGES * ZEND_FIBER_PAGESIZE);
162+
const size_t page_size = zend_fiber_page_size();
163+
164+
void *pointer = (void *) ((uintptr_t) stack->pointer - ZEND_FIBER_GUARD_PAGES * page_size);
162165

163166
#ifdef PHP_WIN32
164167
VirtualFree(pointer, 0, MEM_RELEASE);
165168
#else
166-
size_t length = stack->size + ZEND_FIBER_GUARD_PAGES * ZEND_FIBER_PAGESIZE;
167-
168-
munmap(pointer, length);
169+
munmap(pointer, stack->size + ZEND_FIBER_GUARD_PAGES * page_size);
169170
#endif
170171

171172
stack->pointer = NULL;

Zend/zend_fibers.h

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,14 +55,24 @@ typedef struct _zend_fiber_context {
5555
#if _POSIX_MAPPED_FILES
5656
# include <sys/mman.h>
5757
# include <limits.h>
58-
# define ZEND_FIBER_PAGESIZE sysconf(_SC_PAGESIZE)
58+
59+
ZEND_API static zend_always_inline size_t zend_fiber_page_size()
60+
{
61+
static size_t page_size;
62+
63+
if (!page_size) {
64+
page_size = sysconf(_SC_PAGESIZE);
65+
}
66+
67+
return page_size;
68+
}
5969
#else
60-
# define ZEND_FIBER_PAGESIZE 4096
70+
# define zend_fiber_page_size() 4096
6171
#endif
6272

6373
#define ZEND_FIBER_GUARD_PAGES 1
6474

65-
#define ZEND_FIBER_DEFAULT_STACK_SIZE (ZEND_FIBER_PAGESIZE * (((sizeof(void *)) < 8) ? 512 : 2048))
75+
#define ZEND_FIBER_DEFAULT_PAGE_COUNT (((sizeof(void *)) < 8) ? 512 : 2048)
6676

6777
typedef struct _zend_fiber {
6878
/* Fiber PHP object handle. */

main/main.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -307,22 +307,23 @@ static PHP_INI_MH(OnSetLogFilter)
307307
static PHP_INI_MH(OnUpdateFiberStackSize)
308308
{
309309
zend_long tmp;
310+
const size_t page_size = zend_fiber_page_size();
310311

311312
if (OnUpdateLongGEZero(entry, new_value, mh_arg1, mh_arg2, mh_arg3, stage) == FAILURE) {
312313
return FAILURE;
313314
}
314315

315316
if (EG(fiber_stack_size) == 0) {
316-
EG(fiber_stack_size) = ZEND_FIBER_DEFAULT_STACK_SIZE;
317+
EG(fiber_stack_size) = page_size * ZEND_FIBER_DEFAULT_PAGE_COUNT;
317318
return SUCCESS;
318319
}
319320

320321
EG(fiber_stack_size) += ZEND_FIBER_GUARD_PAGES;
321322

322-
tmp = ZEND_FIBER_PAGESIZE * EG(fiber_stack_size);
323+
tmp = page_size * EG(fiber_stack_size);
323324

324-
if (tmp / ZEND_FIBER_PAGESIZE != EG(fiber_stack_size)) {
325-
EG(fiber_stack_size) = ZEND_FIBER_DEFAULT_STACK_SIZE;
325+
if (tmp / page_size != EG(fiber_stack_size)) {
326+
EG(fiber_stack_size) = page_size * ZEND_FIBER_DEFAULT_PAGE_COUNT;
326327
return FAILURE;
327328
}
328329

0 commit comments

Comments
 (0)