GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — gh-155109: Run tests exhausting the C stack with a limited C stack by serhiy-storchaka · Pull Request #155120 · python/cpython

Conversation

@serhiy-storchaka

@serhiy-storchaka serhiy-storchaka commented Aug 3, 2026 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

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.

  • Issue: skip_if_huge_c_stack underestimates available C recursion depth #155109

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@serhiy-storchaka @claude
pythongh-155109: Run tests exhausting the C stack with a limited C stack
1dfac0f
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) <[email protected]>
@serhiy-storchaka
serhiy-storchaka requested review from AlexWaygood, Eclips4, JelleZijlstra, iritkatriel and tomasr8 as code owners August 3, 2026 13:44
@bedevere-app bedevere-app Bot added the awaiting core review label Aug 3, 2026
@bedevere-app bedevere-app Bot mentioned this pull request Aug 3, 2026
skip_if_huge_c_stack underestimates available C recursion depth #155109
Closed
@serhiy-storchaka @claude
Use a 8 MiB C stack in run_with_limited_c_stack()
74b489a
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) <[email protected]>
@serhiy-storchaka

serhiy-storchaka commented Aug 3, 2026

Copy link
Copy Markdown
Member Author

@kulikjak, could you please test if this helps?

kulikjak reacted with thumbs up emoji
All reactions
  • 👍 1 reaction

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@serhiy-storchaka @claude
Add a NEWS entry
4856144
Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
@AlexWaygood
AlexWaygood removed their request for review August 3, 2026 20:52
@serhiy-storchaka serhiy-storchaka mentioned this pull request Aug 4, 2026
test_detach_materialized_dict_no_memory depends on the exact number of allocations #155146
Closed
@serhiy-storchaka

serhiy-storchaka commented Aug 4, 2026

Copy link
Copy Markdown
Member Author

The failure of the Windows / Build and test (x64, tail-call) job is gh-155146: test_detach_materialized_dict_no_memory fails if any other allocation happens before the one which detaches the instance dictionary, and adding functions to test.support is enough to shift the sequence. Fixed in #155150.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@kulikjak

kulikjak commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Thanks! I tested your change and the test suite is green again.

serhiy-storchaka reacted with hooray emoji
All reactions
  • 🎉 1 reaction

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@serhiy-storchaka
Merge branch 'main' of https://github.com/python/cpython into pythong…
024188e
…h-155109-limited-c-stack
@serhiy-storchaka
serhiy-storchaka enabled auto-merge (squash) August 4, 2026 09:15
@serhiy-storchaka serhiy-storchaka added needs backport to 3.14 bugs and security fixes needs backport to 3.15 bugs and security fixes labels Aug 4, 2026
@serhiy-storchaka
serhiy-storchaka merged commit ce5ae29 into python:main Aug 4, 2026
54 checks passed

Uh oh!

There was an error while loading. Please reload this page.

@miss-islington-app

miss-islington-app Bot commented Aug 4, 2026

Copy link
Copy Markdown

Thanks @serhiy-storchaka for the PR 🌮🎉.. I'm working now to backport this PR to: 3.14, 3.15.
🐍🍒⛏🤖

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@bedevere-app bedevere-app Bot removed the awaiting core review label Aug 4, 2026
@miss-islington-app

miss-islington-app Bot commented Aug 4, 2026

Copy link
Copy Markdown

Sorry, @serhiy-storchaka, I could not cleanly backport this to 3.14 due to a conflict.
Please backport using cherry_picker on command line.

cherry_picker ce5ae29ef9b8ccb32683c922d135339311c36c9d 3.14
All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@miss-islington-app miss-islington-app Bot assigned serhiy-storchaka Aug 4, 2026
@bedevere-app

bedevere-app Bot commented Aug 4, 2026

Copy link
Copy Markdown

GH-155164 is a backport of this pull request to the 3.15 branch.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@bedevere-app bedevere-app Bot removed the needs backport to 3.15 bugs and security fixes label Aug 4, 2026
@bedevere-app

bedevere-app Bot commented Aug 4, 2026

Copy link
Copy Markdown

GH-155165 is a backport of this pull request to the 3.14 branch.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@bedevere-app bedevere-app Bot removed the needs backport to 3.14 bugs and security fixes label Aug 4, 2026
serhiy-storchaka added a commit that referenced this pull request Aug 4, 2026
@serhiy-storchaka @claude
[3.14] gh-155109: Run tests exhausting the C stack with a limited C s…
b669be3
…tack (GH-155120) (GH-155165)

Add the @support.run_with_limited_c_stack() decorator which runs the test
in a thread with a 8 MiB 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.

(cherry picked from commit ce5ae29)

Co-authored-by: Claude Opus 5 (1M context) <[email protected]>
deadlovelll pushed a commit to deadlovelll/cpython that referenced this pull request Aug 5, 2026
@serhiy-storchaka @claude @deadlovelll
[3.14] pythongh-155109: Run tests exhausting the C stack with a limit…
f161c35
…ed C stack (pythonGH-155120) (pythonGH-155165)

Add the @support.run_with_limited_c_stack() decorator which runs the test
in a thread with a 8 MiB 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.

(cherry picked from commit ce5ae29)

Co-authored-by: Claude Opus 5 (1M context) <[email protected]>
mbeijen pushed a commit to mbeijen/cpython that referenced this pull request Aug 14, 2026
@serhiy-storchaka @claude @mbeijen
pythongh-155109: Run tests exhausting the C stack with a limited C st…
50c8389
…ack (pythonGH-155120)

Add the @support.run_with_limited_c_stack() decorator which runs the test
in a thread with a 8 MiB 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) <[email protected]>
@serhiy-storchaka
serhiy-storchaka deleted the gh-155109-limited-c-stack branch August 27, 2026 12:34
@doko42 doko42 mentioned this pull request Sep 28, 2026
[3.14 Regression] test_typing.GenericTests.test_parameters_deep_recursion fails on arm-linux-gnueabihf #158314
Open
serhiy-storchaka added a commit that referenced this pull request Oct 10, 2026
@miss-islington @serhiy-storchaka @claude
[3.15] gh-155109: Run tests exhausting the C stack with a limited C s…
1f660c7
…tack (GH-155120) (GH-155164)

Add the @support.run_with_limited_c_stack() decorator which runs the test
in a thread with a 8 MiB 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.
(cherry picked from commit ce5ae29)

Co-authored-by: Serhiy Storchaka <[email protected]>
Co-authored-by: Claude Opus 5 (1M context) <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@JelleZijlstra JelleZijlstra Awaiting requested review from JelleZijlstra JelleZijlstra is a code owner
@iritkatriel iritkatriel Awaiting requested review from iritkatriel iritkatriel is a code owner
@Eclips4 Eclips4 Awaiting requested review from Eclips4 Eclips4 is a code owner
@tomasr8 tomasr8 Awaiting requested review from tomasr8 tomasr8 is a code owner

Uh oh!

There was an error while loading. Please reload this page.

Assignees

@serhiy-storchaka serhiy-storchaka

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

2 participants

@serhiy-storchaka @kulikjak
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.