https://github.com/python/cpython/commit/7016044de919fa2f14f7c0e0d15ac076b00f16a0
commit: 7016044de919fa2f14f7c0e0d15ac076b00f16a0
branch: main
author: Rok Mandeljc <[email protected]>
committer: markshannon <[email protected]>
date: 2025-09-24T11:57:00+01:00
summary:
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.
files:
M Python/ceval.c
diff --git a/Python/ceval.c b/Python/ceval.c
index 7abbc9e9fd12b6..0ccaacaf3ed5b1 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -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
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]