Document lock acquisition sites and strong->weak GCHandle swap
Comment-only changes. Adds inline notes at lock acquisitions where the
"why" is not obvious from the field declaration alone:
- ClassDerivedObject.Reset / GetModuleBuilder: explain that both
builder caches must update atomically and that DefineDynamicAssembly
/ DefineDynamicModule produce duplicates under contention.
- TypeManager.GetType: note that CreateType + cache write must be
atomic.
- ReflectedClrType.GetOrCreate: cross-file lock; mention it also
serialises ClassManager.cache and TypeManager._slotsHolders writes.
- Runtime.ResetPyMembers: explain the snapshot-then-dispose pattern
(Dispose() callbacks would deadlock if invoked under the lock).
Expands the strong->weak GCHandle swap in ClassDerivedObject.tp_dealloc
to spell out:
1. Why the PyObject is not freed at refcount 0 (C# wrapper may still
reference it; ToPython() resurrects via _Py_NewReference).
2. Why the handle is demoted to weak (lets the C# wrapper be GC'd; on
collection PyFinalize enqueues the real PyObject_GC_Del).
3. Why the swap uses Interlocked.Exchange (tp_clear may race on the
same slot under FT / finalizer thread; without atomic claim both
threads could observe and double-free the same handle).
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
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
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
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
@@ -29,6 +29,8 @@ public static ReflectedClrType GetOrCreate(Type type)
if (ClassManager.cache.TryGetValue(type, out var pyType))
return pyType;
// Shared with ClassManager.cache + TypeManager._slotsHolders writes
// so the multi-step type build below is atomic.
lock (ClassManager._cacheCreateLock)
{
// Re-check now that we hold the lock; another thread may have finished.
Expand Down
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.
Python 3.14 free-threaded support #2721
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
Uh oh!
There was an error while loading. Please reload this page.
Python 3.14 free-threaded support #2721
Filter by extension
Viewed files
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
There are no files selected for viewing