The same bug affects frozenset/set: construction GC-tracks the object before it's filled, so another thread can reach a half-built frozenset via gc.get_objects() mid-construction. ThreadSanitizer confirms it:
WARNING: ThreadSanitizer: data race (pid=78348)
SUMMARY: ThreadSanitizer: data race setobject.c:320 in set_add_entry_takeref
WARNING: ThreadSanitizer: data race (pid=78348)
SUMMARY: ThreadSanitizer: data race setobject.c:321 in set_add_entry_takeref
WARNING: ThreadSanitizer: data race (pid=78348)
SUMMARY: ThreadSanitizer: data race setobject.c:323 in set_add_entry_takeref
WARNING: ThreadSanitizer: data race (pid=78348)
SUMMARY: ThreadSanitizer: data race setobject.c:537 in set_table_resize
SUMMARY: ThreadSanitizer: SEGV setobject.c:816 in set_repr
changed the title [-]Need to defer GC tracking of frozenset construction[/-][+]Need to defer GC tracking of frozenset/set construction[/+]on Jun 25, 2026
Activity
gh-152235: Defer GC tracking of set and frozenset to end of construct…
[3.14] gh-152235: Defer GC tracking of set and frozenset to end of co…
corona10 commented on Jun 26, 2026
More stuff still left, I am working on it.
[3.15] gh-152235: Defer GC tracking of set and frozenset to end of co…
[3.13] gh-152235: Defer GC tracking of set and frozenset to end of co…
pythongh-152235: Defer GC tracking in more set operations
gh-152235: Defer GC tracking in more set operations (gh-152273)
[3.15] gh-152235: Defer GC tracking in more set operations (gh-152273) (
[3.14] gh-152235: Defer GC tracking in more set operations (gh-152273) (
pythongh-152235: Defer GC tracking in set.union and set.difference
[3.13] gh-152235: Defer GC tracking in more set operations (gh-152273) (
gh-152235: Defer GC tracking in set.union and set.difference (gh-152290)
[3.14] gh-152235: Defer GC tracking in set.union and set.difference (g…
[3.13] gh-152235: Defer GC tracking in set.union and set.difference (g…
[3.15] gh-152235: Defer GC tracking in set.union and set.difference (g…