]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.14] gh-130522: Fix unraisable TypeError in threading at interpreter shutdown ...
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Mon, 4 Aug 2025 13:01:39 +0000 (15:01 +0200)
committerGitHub <noreply@github.com>
Mon, 4 Aug 2025 13:01:39 +0000 (16:01 +0300)
Co-authored-by: Tyler Kennedy <tk@tkte.ch>
Co-authored-by: Peter Bierma <zintensitydev@gmail.com>
Lib/test/test_threading.py
Lib/threading.py
Misc/NEWS.d/next/Library/2025-07-25-09-21-56.gh-issue-130522.Crwq68.rst [new file with mode: 0644]

index c07b8133f0a2d1838c14560cf6429d1c675e9205..e468fcd7601c156557108e9762b50b5c7dd1abd0 100644 (file)
@@ -1993,6 +1993,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):
index 2a65f9a7aa30283519b2de5d0d97d8810c101ea6..79b753d983aaaf8e684a765d887b049dc5429cb9 100644 (file)
@@ -1421,7 +1421,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 (file)
index 0000000..6c22466
--- /dev/null
@@ -0,0 +1,2 @@
+Fix unraisable :exc:`TypeError` raised during :term:`interpreter shutdown`
+in the :mod:`threading` module.