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]

Reply via email to