mirror of
https://github.com/python/cpython.git
synced 2025-10-14 10:53:40 +00:00
gh-130091: Reorder _PyThreadState_Attach
to avoid data race (gh-130092)
This moves `tstate_activate()` down to avoid a data race in the free threading build on the `_PyRuntime`'s thread-local `autoTSSkey`. This key is deleted during runtime finalization, which may happen concurrently with a call to `_PyThreadState_Attach`. The earlier `tstate_try/wait_attach` ensures that the thread is blocked before it attempts to access the deleted `autoTSSkey`. This fixes a TSAN reported data race in `test_threading.test_import_from_another_thread`.
This commit is contained in:
parent
e06bebb87e
commit
7aeaa5af2c
1 changed files with 1 additions and 2 deletions
|
@ -2099,11 +2099,10 @@ _PyThreadState_Attach(PyThreadState *tstate)
|
||||||
|
|
||||||
// XXX assert(tstate_is_alive(tstate));
|
// XXX assert(tstate_is_alive(tstate));
|
||||||
current_fast_set(&_PyRuntime, tstate);
|
current_fast_set(&_PyRuntime, tstate);
|
||||||
tstate_activate(tstate);
|
|
||||||
|
|
||||||
if (!tstate_try_attach(tstate)) {
|
if (!tstate_try_attach(tstate)) {
|
||||||
tstate_wait_attach(tstate);
|
tstate_wait_attach(tstate);
|
||||||
}
|
}
|
||||||
|
tstate_activate(tstate);
|
||||||
|
|
||||||
#ifdef Py_GIL_DISABLED
|
#ifdef Py_GIL_DISABLED
|
||||||
if (_PyEval_IsGILEnabled(tstate) && !tstate->_status.holds_gil) {
|
if (_PyEval_IsGILEnabled(tstate) && !tstate->_status.holds_gil) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue