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 |
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 |
|
This conversation seems to go against our AI policy. Human interaction is necessary, don't let your agents in automated mode. Please read https://devguide.python.org/getting-started/ai-tools/#guidelines-for-using-ai-tools. |
Sorry — I used an AI assistant to draft PR replies and posted them On the technical side: I understand the mutex doesn't protect reads |
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