gh-130123: Make __new__ wrapper be deferred#130124
Merged
DinoV merged 2 commits intopython:mainfrom Feb 14, 2025
Merged
Conversation
colesbury
reviewed
Feb 14, 2025
| } | ||
| r = PyDict_SetItem(dict, &_Py_ID(__new__), func); | ||
| if (!r) { | ||
| _PyObject_SetDeferredRefcount(func); |
Contributor
There was a problem hiding this comment.
Can we move this up before the PyDict_SetItem? I'd rather set the deferred reference counting bit before exposing the function to avoid any race conditions on ob_gc_bits.
82e19c2 to
48c0e94
Compare
colesbury
approved these changes
Feb 14, 2025
mpage
approved these changes
Feb 14, 2025
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 is just a small tweak to make
__new__be deferred so that it can be cached in the specializing interpreter.__new__'s wrapper is small, doesn't hold onto other things except the circular reference between it and the type, meaning the GC reclaims it anyways. We may as well defer it and be able to load cached values.https://github.com/facebookexperimental/free-threading-benchmarking/blob/main/results/bm-20250213-3.14.0a5%2B-82e19c2-NOGIL/bm-20250213-vultr-x86_64-DinoV-deferred_dunder_new-3.14.0a5%2B-82e19c2-vs-base.md