gh-125859: Fix crash when gc.get_objects is called during GC#125882
Merged
colesbury merged 2 commits intopython:mainfrom Oct 24, 2024
Merged
gh-125859: Fix crash when gc.get_objects is called during GC#125882colesbury merged 2 commits intopython:mainfrom
gc.get_objects is called during GC#125882colesbury merged 2 commits intopython:mainfrom
Conversation
This fixes a crash when `gc.get_objects()` or `gc.get_referrers()` is called during a GC in the free threading build. Switch to `_PyObjectStack` to avoid corrupting the `struct worklist` linked list maintained by the GC. Also, don't return objects that are frozen (gc.freeze) or in the process of being collected to more closely match the behavior of the default build.
After the `_PyEval_StartTheWorld()` call, other threads may be running and mutating objects. Ensure that the objects are kept alive by incref'ing them when they're added to the `_PyObjectStack`.
Contributor
Author
|
@mpage - would you please re-review this? The previous version had a bug where the objects found during |
mpage
approved these changes
Oct 24, 2024
|
Thanks @colesbury for the PR 🌮🎉.. I'm working now to backport this PR to: 3.13. |
miss-islington
pushed a commit
to miss-islington/cpython
that referenced
this pull request
Oct 24, 2024
…ythonGH-125882) This fixes a crash when `gc.get_objects()` or `gc.get_referrers()` is called during a GC in the free threading build. Switch to `_PyObjectStack` to avoid corrupting the `struct worklist` linked list maintained by the GC. Also, don't return objects that are frozen (`gc.freeze()`) or in the process of being collected to more closely match the behavior of the default build. (cherry picked from commit e545ead) Co-authored-by: Sam Gross <colesbury@gmail.com>
|
GH-125921 is a backport of this pull request to the 3.13 branch. |
colesbury
added a commit
that referenced
this pull request
Oct 24, 2024
…GH-125882) (GH-125921) This fixes a crash when `gc.get_objects()` or `gc.get_referrers()` is called during a GC in the free threading build. Switch to `_PyObjectStack` to avoid corrupting the `struct worklist` linked list maintained by the GC. Also, don't return objects that are frozen (`gc.freeze()`) or in the process of being collected to more closely match the behavior of the default build. (cherry picked from commit e545ead) Co-authored-by: Sam Gross <colesbury@gmail.com>
ebonnal
pushed a commit
to ebonnal/cpython
that referenced
this pull request
Jan 12, 2025
…ython#125882) This fixes a crash when `gc.get_objects()` or `gc.get_referrers()` is called during a GC in the free threading build. Switch to `_PyObjectStack` to avoid corrupting the `struct worklist` linked list maintained by the GC. Also, don't return objects that are frozen (`gc.freeze()`) or in the process of being collected to more closely match the behavior of the default build.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
This fixes a crash when
gc.get_objects()orgc.get_referrers()is called during a GC in the free threading build.Switch to
_PyObjectStackto avoid corrupting thestruct worklistlinked list maintained by the GC. Also, don't return objects that are frozen (gc.freeze()) or in the process of being collected to more closely match the behavior of the default build.gc.get_objectscan corrupt in-progress GC in free threading build #125859