Skip to content

gh-155109: Run tests exhausting the C stack with a limited C stack - #155120

Open
serhiy-storchaka wants to merge 3 commits into
python:mainfrom
serhiy-storchaka:gh-155109-limited-c-stack
Open

gh-155109: Run tests exhausting the C stack with a limited C stack#155120
serhiy-storchaka wants to merge 3 commits into
python:mainfrom
serhiy-storchaka:gh-155109-limited-c-stack

Conversation

@serhiy-storchaka

@serhiy-storchaka serhiy-storchaka commented Aug 3, 2026

Copy link
Copy Markdown
Member

Add the @support.run_with_limited_c_stack(depth) decorator: it runs the test in a thread with an 8 MiB C stack, so that the outcome does not depend on RLIMIT_STACK. If the thread stack size cannot be limited, it falls back to the old behavior — run in the current thread and skip if the C stack is too large.

Use it in tests which recurse to a fixed depth. @support.skip_if_huge_c_stack() estimates the remaining stack in interpreter loop frames (~328 bytes), so it fails to skip tests which recurse with much smaller C frames (~100 bytes) — they fail with a 16 MiB stack. It is kept for tests with unbounded recursion and for test_call.test_super_deep(), which needs a deep stack.

Tested on Linux with 1, 8, 16, 32 and 512 MiB and unlimited stack limits, and on illumos and OpenBSD.

Add the @support.run_with_limited_c_stack() decorator which runs the test
in a thread with a small C stack, so that the outcome does not depend on
RLIMIT_STACK. Use it in tests which recurse to a fixed depth --
@support.skip_if_huge_c_stack() failed to skip them with a 16 MiB stack.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
On platforms where the interpreter cannot query the thread stack size it
assumes Py_C_STACK_SIZE (4 MiB), so a smaller thread stack crashes instead
of raising RecursionError. Verified on illumos and OpenBSD: a 2 MiB stack
dumps core, 8 MiB raises RecursionError.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@serhiy-storchaka

Copy link
Copy Markdown
Member Author

@kulikjak, could you please test if this helps?

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@AlexWaygood
AlexWaygood removed their request for review August 3, 2026 20:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant