mirror of
https://github.com/python/cpython.git
synced 2025-10-19 16:03:42 +00:00
gh-139231: Fix estimation of available stack size for recursion limit on macOS (GH-139232)
Use `pthread_get_stackaddr_np()` and `pthread_get_stacksize_np()` to determine the stack address and size.
This commit is contained in:
parent
a5e0562350
commit
7016044de9
1 changed files with 7 additions and 0 deletions
|
@ -451,6 +451,13 @@ _Py_InitializeRecursionLimits(PyThreadState *tstate)
|
|||
SetThreadStackGuarantee(&guarantee);
|
||||
_tstate->c_stack_hard_limit = ((uintptr_t)low) + guarantee + _PyOS_STACK_MARGIN_BYTES;
|
||||
_tstate->c_stack_soft_limit = _tstate->c_stack_hard_limit + _PyOS_STACK_MARGIN_BYTES;
|
||||
#elif defined(__APPLE__)
|
||||
pthread_t this_thread = pthread_self();
|
||||
void *stack_addr = pthread_get_stackaddr_np(this_thread); // top of the stack
|
||||
size_t stack_size = pthread_get_stacksize_np(this_thread);
|
||||
_tstate->c_stack_top = (uintptr_t)stack_addr;
|
||||
_tstate->c_stack_hard_limit = _tstate->c_stack_top - stack_size;
|
||||
_tstate->c_stack_soft_limit = _tstate->c_stack_hard_limit + _PyOS_STACK_MARGIN_BYTES;
|
||||
#else
|
||||
uintptr_t here_addr = _Py_get_machine_stack_pointer();
|
||||
/// XXX musl supports HAVE_PTHRED_GETATTR_NP, but the resulting stack size
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue