From cb93b6fc5ea525f8075cb53ec373356fec63903a Mon Sep 17 00:00:00 2001 From: Tyler Kennedy Date: Fri, 25 Jul 2025 10:51:30 -0400 Subject: [PATCH] gh-130522: Fix unraisable TypeError in threading at interpreter shutdown (#131537) Co-authored-by: Peter Bierma --- Lib/test/test_threading.py | 17 +++++++++++++++++ Lib/threading.py | 2 +- ...25-07-25-09-21-56.gh-issue-130522.Crwq68.rst | 2 ++ 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 Misc/NEWS.d/next/Library/2025-07-25-09-21-56.gh-issue-130522.Crwq68.rst diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py index 00a3037c3e1e..002a1feeb85c 100644 --- a/Lib/test/test_threading.py +++ b/Lib/test/test_threading.py @@ -2042,6 +2042,23 @@ class ThreadingExceptionTests(BaseTestCase): t.start() t.join() + def test_dummy_thread_on_interpreter_shutdown(self): + # GH-130522: When `threading` held a reference to itself and then a + # _DummyThread() object was created, destruction of the dummy thread + # would emit an unraisable exception at shutdown, due to a lock being + # destroyed. + code = """if True: + import sys + import threading + + threading.x = sys.modules[__name__] + x = threading._DummyThread() + """ + rc, out, err = assert_python_ok("-c", code) + self.assertEqual(rc, 0) + self.assertEqual(out, b"") + self.assertEqual(err, b"") + class ThreadRunFail(threading.Thread): def run(self): diff --git a/Lib/threading.py b/Lib/threading.py index b6c451d1fbaa..b3e24fe7ddaa 100644 --- a/Lib/threading.py +++ b/Lib/threading.py @@ -1414,7 +1414,7 @@ class _DeleteDummyThreadOnDel: # the related _DummyThread will be kept forever! _thread_local_info._track_dummy_thread_ref = self - def __del__(self): + def __del__(self, _active_limbo_lock=_active_limbo_lock, _active=_active): with _active_limbo_lock: if _active.get(self._tident) is self._dummy_thread: _active.pop(self._tident, None) diff --git a/Misc/NEWS.d/next/Library/2025-07-25-09-21-56.gh-issue-130522.Crwq68.rst b/Misc/NEWS.d/next/Library/2025-07-25-09-21-56.gh-issue-130522.Crwq68.rst new file mode 100644 index 000000000000..6c2246631dda --- /dev/null +++ b/Misc/NEWS.d/next/Library/2025-07-25-09-21-56.gh-issue-130522.Crwq68.rst @@ -0,0 +1,2 @@ +Fix unraisable :exc:`TypeError` raised during :term:`interpreter shutdown` +in the :mod:`threading` module. -- 2.47.3