@@ -100,12 +100,13 @@ zend_always_inline static void zend_observer_fiber_switch_notify(zend_fiber *fro
100
100
101
101
static zend_bool zend_fiber_stack_allocate (zend_fiber_stack * stack , size_t size ) /* {{{ */
102
102
{
103
- ZEND_ASSERT (size >= ZEND_FIBER_PAGESIZE + ZEND_FIBER_GUARD_PAGES * ZEND_FIBER_PAGESIZE );
104
-
105
103
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 );
106
107
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 ;
109
110
110
111
#ifdef PHP_WIN32
111
112
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)
117
118
# if ZEND_FIBER_GUARD_PAGES
118
119
DWORD protect ;
119
120
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 )) {
121
122
VirtualFree (pointer , 0 , MEM_RELEASE );
122
123
return 0 ;
123
124
}
@@ -130,18 +131,18 @@ static zend_bool zend_fiber_stack_allocate(zend_fiber_stack *stack, size_t size)
130
131
}
131
132
132
133
# 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 ) {
134
135
munmap (pointer , msize );
135
136
return 0 ;
136
137
}
137
138
# endif
138
139
#endif
139
140
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 );
141
142
142
143
#ifdef VALGRIND_STACK_REGISTER
143
144
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 );
145
146
#endif
146
147
147
148
return 1 ;
@@ -158,14 +159,14 @@ void zend_fiber_stack_free(zend_fiber_stack *stack) /* {{{ */
158
159
VALGRIND_STACK_DEREGISTER (stack -> valgrind );
159
160
#endif
160
161
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 );
162
165
163
166
#ifdef PHP_WIN32
164
167
VirtualFree (pointer , 0 , MEM_RELEASE );
165
168
#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 );
169
170
#endif
170
171
171
172
stack -> pointer = NULL ;
0 commit comments