gh-151218: Fix data race in sys_set_flag for free-threading#151220
gh-151218: Fix data race in sys_set_flag for free-threading#151220bhuvi27 wants to merge 1 commit into
Conversation
2bff4e1 to
099518a
Compare
Concurrent calls to sys.set_int_max_str_digits() in free-threaded builds could double-free the same sys.flags tuple item because sys_set_flag() updated the slot without synchronization. Protect sys.flags updates with a mutex in free-threaded builds and hold the same lock across the flag and interpreter int_max_str_digits state updates so sys.get_int_max_str_digits() stays consistent with sys.flags.
099518a to
09f17c8
Compare
|
Please do not force push. To contribute cleanly, please read https://devguide.python.org/getting-started/pull-request-lifecycle/#pullrequest. |
|
This doesn't guard the read though. And the read through |
Thanks for the pointer — I force-pushed while fixing CI and cleaning up commits. I’ll use additive commits from here on and have read the PR lifecycle guide. |
Good point — you're right that the read path through A few options I see:
Option 1 looks cleanest and matches the "immutable" intent, but it's |
Fixes #151218
Concurrent calls to sys.set_int_max_str_digits() in free-threaded builds
could double-free the same sys.flags tuple item because sys_set_flag()
updated the slot without synchronization.
Protect sys.flags updates with a mutex in free-threaded builds, and hold
the same lock across flag and interpreter int_max_str_digits state updates
so sys.get_int_max_str_digits() stays consistent with sys.flags. Add a
concurrent stress regression test in test_sys.py.
sys_set_flagwhensys.set_int_max_str_digits()is called concurrently with free-threaded build #151218