summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSam Gross <colesbury@gmail.com>2024-03-07 18:37:43 (GMT)
committerGitHub <noreply@github.com>2024-03-07 18:37:43 (GMT)
commit834bf57eb79e9bf383a7173fccda032f4c53f69b (patch)
treea921ed5705a2dcc42d28c173198f92ee7d9e552f
parentd9bcdda39c62a8c37637ecd5f82f83f6e8828243 (diff)
downloadcpython-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.c12
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);
}