https://github.com/python/cpython/commit/a4095ee272f5e5082281a94a0856dde3c2f323f9
commit: a4095ee272f5e5082281a94a0856dde3c2f323f9
branch: main
author: Edward Xu <[email protected]>
committer: kumaraditya303 <[email protected]>
date: 2026-08-03T15:20:39Z
summary:
gh-154937: Fix `_thread._shutdown()` racing with
`_thread.start_joinable_thread` on `ThreadHandle.ident` (#155085)
files:
A
Misc/NEWS.d/next/Core_and_Builtins/2026-08-02-17-55-29.gh-issue-154937.m9IBba.rst
M Modules/_threadmodule.c
diff --git
a/Misc/NEWS.d/next/Core_and_Builtins/2026-08-02-17-55-29.gh-issue-154937.m9IBba.rst
b/Misc/NEWS.d/next/Core_and_Builtins/2026-08-02-17-55-29.gh-issue-154937.m9IBba.rst
new file mode 100644
index 000000000000000..475dc8358a8d811
--- /dev/null
+++
b/Misc/NEWS.d/next/Core_and_Builtins/2026-08-02-17-55-29.gh-issue-154937.m9IBba.rst
@@ -0,0 +1,3 @@
+Fix a data race on thread handle identifiers when ``_thread._shutdown()``
+runs concurrently with the startup of non-daemon threads in the
+:term:`free-threaded build`.
diff --git a/Modules/_threadmodule.c b/Modules/_threadmodule.c
index e999fe20287e2d6..199e4ac3db723bf 100644
--- a/Modules/_threadmodule.c
+++ b/Modules/_threadmodule.c
@@ -2413,7 +2413,7 @@ thread_shutdown(PyObject *self, PyObject *args)
struct llist_node *node;
llist_for_each_safe(node, &state->shutdown_handles) {
ThreadHandle *cur = llist_data(node, ThreadHandle, shutdown_node);
- if (cur->ident != ident) {
+ if (ThreadHandle_ident(cur) != ident) {
ThreadHandle_incref(cur);
handle = cur;
break;
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]