Skip to content

Commit a01a43f

Browse files
committed
The typo in HAVE_PTHREAD_ATTR_GET_STACK (might be due to pthread_attr_get_np being different from Linux's pthread_getattr_np) led to this code path never get called on FreeBSD.
1 parent d58e3c0 commit a01a43f

File tree

1 file changed

+14
-6
lines changed

1 file changed

+14
-6
lines changed

Zend/zend_call_stack.c

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ static bool zend_call_stack_is_main_thread(void) {
104104
# endif
105105
}
106106

107-
# ifdef HAVE_PTHREAD_GETATTR_NP
107+
# if defined(HAVE_PTHREAD_GETATTR_NP) && defined(HAVE_PTHREAD_ATTR_GETSTACK)
108108
static bool zend_call_stack_get_linux_pthread(zend_call_stack *stack)
109109
{
110110
pthread_attr_t attr;
@@ -145,12 +145,12 @@ static bool zend_call_stack_get_linux_pthread(zend_call_stack *stack)
145145

146146
return true;
147147
}
148-
# else /* HAVE_PTHREAD_GETATTR_NP */
148+
# else /* defined(HAVE_PTHREAD_GETATTR_NP) && defined(HAVE_PTHREAD_ATTR_GETSTACK) */
149149
static bool zend_call_stack_get_linux_pthread(zend_call_stack *stack)
150150
{
151151
return false;
152152
}
153-
# endif /* HAVE_PTHREAD_GETATTR_NP */
153+
# endif /* defined(HAVE_PTHREAD_GETATTR_NP) && defined(HAVE_PTHREAD_ATTR_GETSTACK) */
154154

155155
static bool zend_call_stack_get_linux_proc_maps(zend_call_stack *stack)
156156
{
@@ -251,7 +251,7 @@ static bool zend_call_stack_is_main_thread(void)
251251
return is_main == -1 || is_main == 1;
252252
}
253253

254-
# if defined(HAVE_PTHREAD_ATTR_GET_NP) && defined(HAVE_PTHREAD_ATTR_GET_STACK)
254+
# if defined(HAVE_PTHREAD_ATTR_GET_NP) && defined(HAVE_PTHREAD_ATTR_GETSTACK)
255255
static bool zend_call_stack_get_freebsd_pthread(zend_call_stack *stack)
256256
{
257257
pthread_attr_t attr;
@@ -275,6 +275,14 @@ static bool zend_call_stack_get_freebsd_pthread(zend_call_stack *stack)
275275
goto fail;
276276
}
277277

278+
error = pthread_attr_getguardsize(&attr, &guard_size);
279+
if (error) {
280+
return false;
281+
}
282+
283+
addr = (char *)addr + guard_size;
284+
max_size -= guard_size;
285+
278286
stack->base = (int8_t*)addr + max_size;
279287
stack->max_size = max_size;
280288

@@ -285,12 +293,12 @@ static bool zend_call_stack_get_freebsd_pthread(zend_call_stack *stack)
285293
pthread_attr_destroy(&attr);
286294
return false;
287295
}
288-
# else /* defined(HAVE_PTHREAD_ATTR_GET_NP) && defined(HAVE_PTHREAD_ATTR_GET_STACK) */
296+
# else /* defined(HAVE_PTHREAD_ATTR_GET_NP) && defined(HAVE_PTHREAD_ATTR_GETSTACK) */
289297
static bool zend_call_stack_get_freebsd_pthread(zend_call_stack *stack)
290298
{
291299
return false;
292300
}
293-
# endif /* defined(HAVE_PTHREAD_ATTR_GET_NP) && defined(HAVE_PTHREAD_ATTR_GET_STACK) */
301+
# endif /* defined(HAVE_PTHREAD_ATTR_GET_NP) && defined(HAVE_PTHREAD_ATTR_GETSTACK) */
294302

295303
static bool zend_call_stack_get_freebsd_sysctl(zend_call_stack *stack)
296304
{

0 commit comments

Comments
 (0)