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
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:
I am working on this
Linked PRs