Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork32.3k
gh-131338: Disable new stack size code for non-glibc on linux.#134336
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
base:main
Are you sure you want to change the base?
gh-131338: Disable new stack size code for non-glibc on linux.#134336
Uh oh!
There was an error while loading.Please reload this page.
Conversation
MUSL claims to support pthread_getattr_np, but the response returned isoff by at least an order of magnitude compared to reality. This isapparently a long standing problem. MUSL also does not provide any wayto detect directly that it is the libc. It would be possible to addthings to configure to detect that MUSL is the compiler, but since thiscode has caused problems for a lot of non-glibc platforms, it seemseasier to just restrict it to glibc.
Python/ceval.c Outdated
@@ -442,7 +442,8 @@ _Py_InitializeRecursionLimits(PyThreadState *tstate) | |||
_tstate->c_stack_soft_limit = _tstate->c_stack_hard_limit + PYOS_STACK_MARGIN_BYTES; | |||
#else | |||
uintptr_t here_addr = _Py_get_machine_stack_pointer(); | |||
# if defined(HAVE_PTHREAD_GETATTR_NP) && !defined(_AIX) && !defined(__NetBSD__) | |||
# if defined(HAVE_PTHREAD_GETATTR_NP) && !defined(_AIX) && \ | |||
!defined(__NetBSD__) && defined(__GLIBC__) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
I don't think that this call is correct. It disables the call on FreeBSD.
Maybe check for "glibc or not Linux"?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
That would fix it for alpine, but not for emscripten or wasi (but I don't know what they actually need). I'drather see it as if glibc or freebsd, and get rid of the rest, but glibc or not linux would work for my immediate concern.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Well, let's start with fixing Alpine Linux.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
OK, done. Also added an XXX comment, since I think this needs more investigation. I'll put it on my todo list to post to the musl mailing list about it.
This exempts alpine but doesn't affect, eg, FreeBSD.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
LGTM
Python/ceval.c Outdated
/// XXX musl supports HAVE_PTHRED_GETATTR_NP, but the resulting stack size | ||
/// (on alpine at least) is much smaller than expected and imposes undue limits | ||
/// compared to the old stack size estimation. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
/// XXX musl supports HAVE_PTHRED_GETATTR_NP, but the resulting stack size | |
/// (onalpine at least) is much smaller than expected and imposes undue limits | |
/// compared to the old stack size estimation. | |
// gh-131338: musl supports HAVE_PTHRED_GETATTR_NP, but the resulting stack size | |
// (onLinux Alpine at least) is much smaller than expected and imposes undue limits | |
// compared to the old stack size estimation. |
You may mention that__GLIBC__
is used to detect musl support.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Updated comment. If that clarification doesn't feel like enough I'll rewrite the whole comment.
@@ -444,7 +444,7 @@ _Py_InitializeRecursionLimits(PyThreadState *tstate) | |||
uintptr_t here_addr = _Py_get_machine_stack_pointer(); | |||
/// XXX musl supports HAVE_PTHRED_GETATTR_NP, but the resulting stack size | |||
/// (on alpine at least) is much smaller than expected and imposes undue limits | |||
/// compared to the old stack size estimation. | |||
/// compared to the old stack size estimation. (We assume musl if not glibc.) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
/// compared to the old stack size estimation. (We assume muslif not glibc.) | |
/// compared to the old stack size estimation. (We assume muslis not glibc.) |
This looks good but it needs a news entry as it is a bugfix and needs to be backported to 3.14. |
Uh oh!
There was an error while loading.Please reload this page.
MUSL claims to support pthread_getattr_np, but the response returned is off by at least an order of magnitude compared to reality. This is apparently a long standing problem. MUSL also does not provide any way to detect directly that it is the libc. It would be possible to add things to configure to detect that MUSL is the compiler, but since this code has apparently caused problems for a lot of non-glibc platforms, it seems easier to just restrict it to glibc.