diff options
author | Sam Gross <colesbury@gmail.com> | 2024-03-07 18:37:43 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-07 18:37:43 (GMT) |
commit | 834bf57eb79e9bf383a7173fccda032f4c53f69b (patch) | |
tree | a921ed5705a2dcc42d28c173198f92ee7d9e552f | |
parent | d9bcdda39c62a8c37637ecd5f82f83f6e8828243 (diff) | |
download | cpython-834bf57eb79e9bf383a7173fccda032f4c53f69b.zip cpython-834bf57eb79e9bf383a7173fccda032f4c53f69b.tar.gz cpython-834bf57eb79e9bf383a7173fccda032f4c53f69b.tar.bz2 |
gh-116396: Pass "detached_state" argument to tstate_set_detached (#116398)
The stop-the-world code was incorrectly setting suspended threads'
states to _Py_THREAD_DETACHED instead of _Py_THREAD_SUSPENDED.
-rw-r--r-- | Python/pystate.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/Python/pystate.c b/Python/pystate.c index 274aec8..1418d03 100644 --- a/Python/pystate.c +++ b/Python/pystate.c @@ -903,7 +903,7 @@ _PyInterpreterState_Clear(PyThreadState *tstate) static inline void tstate_deactivate(PyThreadState *tstate); -static void tstate_set_detached(PyThreadState *tstate); +static void tstate_set_detached(PyThreadState *tstate, int detached_state); static void zapthreads(PyInterpreterState *interp); void @@ -1686,7 +1686,7 @@ _PyThreadState_DeleteCurrent(PyThreadState *tstate) #ifdef Py_GIL_DISABLED _Py_qsbr_detach(((_PyThreadStateImpl *)tstate)->qsbr); #endif - tstate_set_detached(tstate); + tstate_set_detached(tstate, _Py_THREAD_DETACHED); tstate_delete_common(tstate); current_fast_clear(tstate->interp->runtime); _PyEval_ReleaseLock(tstate->interp, NULL); @@ -1859,13 +1859,13 @@ tstate_try_attach(PyThreadState *tstate) } static void -tstate_set_detached(PyThreadState *tstate) +tstate_set_detached(PyThreadState *tstate, int detached_state) { assert(tstate->state == _Py_THREAD_ATTACHED); #ifdef Py_GIL_DISABLED - _Py_atomic_store_int(&tstate->state, _Py_THREAD_DETACHED); + _Py_atomic_store_int(&tstate->state, detached_state); #else - tstate->state = _Py_THREAD_DETACHED; + tstate->state = detached_state; #endif } @@ -1935,7 +1935,7 @@ detach_thread(PyThreadState *tstate, int detached_state) _Py_qsbr_detach(((_PyThreadStateImpl *)tstate)->qsbr); #endif tstate_deactivate(tstate); - tstate_set_detached(tstate); + tstate_set_detached(tstate, detached_state); current_fast_clear(&_PyRuntime); _PyEval_ReleaseLock(tstate->interp, tstate); } |