Skip to content
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 our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GC may have inconsistent view of stacktop with deferred references #118926

Closed
Tracked by #117139
Fidget-Spinner opened this issue May 10, 2024 · 2 comments · Fixed by #122730
Closed
Tracked by #117139

GC may have inconsistent view of stacktop with deferred references #118926

Fidget-Spinner opened this issue May 10, 2024 · 2 comments · Fixed by #122730
Labels
interpreter-core (Objects, Python, Grammar, and Parser dirs) type-bug An unexpected behavior, bug, or error

Comments

@Fidget-Spinner
Copy link
Member

Fidget-Spinner commented May 10, 2024

In #118450, Sam pointed out that GC can occur at any Py_DECREF. With deferred references, we will need to traverse the object's stacks. The main problem is that frame->stacktop might not represent the true stacktop at a GC collection, because frame->stacktop is not set in between opcodes.

This requires either scanning the entire stack (not just up to stacktop), or deferring GC to safe points.

Linked PRs

noahbkim pushed a commit to hudson-trading/cpython that referenced this issue Jul 11, 2024
estyxx pushed a commit to estyxx/cpython that referenced this issue Jul 17, 2024
colesbury added a commit to colesbury/cpython that referenced this issue Aug 6, 2024
This automatically spills the results from `_PyStackRef_FromPyObjectNew`
to the in-memory stack so that the deferred references are visible to
the GC before we make any possibly escaping call.

Co-authored-by: Ken Jin <kenjin@python.org>
@colesbury colesbury reopened this Aug 6, 2024
colesbury added a commit that referenced this issue Aug 7, 2024
…2748)

This automatically spills the results from `_PyStackRef_FromPyObjectNew`
to the in-memory stack so that the deferred references are visible to
the GC before we make any possibly escaping call.

Co-authored-by: Ken Jin <kenjin@python.org>
blhsing pushed a commit to blhsing/cpython that referenced this issue Aug 22, 2024
python#122748)

This automatically spills the results from `_PyStackRef_FromPyObjectNew`
to the in-memory stack so that the deferred references are visible to
the GC before we make any possibly escaping call.

Co-authored-by: Ken Jin <kenjin@python.org>
@JacobCoffee JacobCoffee added type-bug An unexpected behavior, bug, or error interpreter-core (Objects, Python, Grammar, and Parser dirs) labels Oct 1, 2024
@JacobCoffee
Copy link
Member

hey @Fidget-Spinner is this good to close since the ref'd PRs are merged?

@Fidget-Spinner
Copy link
Member Author

Yup

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
interpreter-core (Objects, Python, Grammar, and Parser dirs) type-bug An unexpected behavior, bug, or error
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants