From fb9a99134a60cd878121c390fdb25aa9511fb9f8 Mon Sep 17 00:00:00 2001 From: sxt1001 Date: Mon, 1 Feb 2021 15:35:29 +0800 Subject: [PATCH] Fix a reference leak if a thread is not joined --- ...rence-leak-if-a-thread-is-not-joined.patch | 63 +++++++++++++++++++ python3.spec | 10 ++- 2 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 backport-Fix-a-reference-leak-if-a-thread-is-not-joined.patch diff --git a/backport-Fix-a-reference-leak-if-a-thread-is-not-joined.patch b/backport-Fix-a-reference-leak-if-a-thread-is-not-joined.patch new file mode 100644 index 0000000..2919676 --- /dev/null +++ b/backport-Fix-a-reference-leak-if-a-thread-is-not-joined.patch @@ -0,0 +1,63 @@ +From d3dcc92778807ae8f7ebe85178f36a29711cd478 Mon Sep 17 00:00:00 2001 +From: Victor Stinner +Date: Mon, 19 Aug 2019 23:37:17 +0100 +Subject: [PATCH] bpo-37788: Fix a reference leak if a thread is not joined + (GH-15228) + +Add threading.Thread.__del__() method to ensure that the thread state +lock is removed from the _shutdown_locks list when a thread +completes. +--- + Lib/test/test_threading.py | 8 ++++++++ + Lib/threading.py | 10 ++++++++++ + .../Library/2019-08-12-17-21-10.bpo-37788.F0tR05.rst | 1 + + 3 files changed, 19 insertions(+) + create mode 100644 Misc/NEWS.d/next/Library/2019-08-12-17-21-10.bpo-37788.F0tR05.rst + +diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py +index 7c16974c1630a..5e90627822f9f 100644 +--- a/Lib/test/test_threading.py ++++ b/Lib/test/test_threading.py +@@ -761,6 +761,14 @@ def test_shutdown_locks(self): + # Daemon threads must never add it to _shutdown_locks. + self.assertNotIn(tstate_lock, threading._shutdown_locks) + ++ def test_leak_without_join(self): ++ # bpo-37788: Test that a thread which is not joined explicitly ++ # does not leak. Test written for reference leak checks. ++ def noop(): pass ++ with support.wait_threads_exit(): ++ threading.Thread(target=noop).start() ++ # Thread.join() is not called ++ + + class ThreadJoinOnShutdown(BaseTestCase): + +diff --git a/Lib/threading.py b/Lib/threading.py +index 32a3d7c303362..67e1c4facfee2 100644 +--- a/Lib/threading.py ++++ b/Lib/threading.py +@@ -806,6 +806,16 @@ class is implemented. + # For debugging and _after_fork() + _dangling.add(self) + ++ def __del__(self): ++ if not self._initialized: ++ return ++ lock = self._tstate_lock ++ if lock is not None and not self.daemon: ++ # ensure that self._tstate_lock is not in _shutdown_locks ++ # if join() was not called explicitly ++ with _shutdown_locks_lock: ++ _shutdown_locks.discard(lock) ++ + def _reset_internal_locks(self, is_alive): + # private! Called by _after_fork() to reset our internal locks as + # they may be in an invalid state leading to a deadlock or crash. +diff --git a/Misc/NEWS.d/next/Library/2019-08-12-17-21-10.bpo-37788.F0tR05.rst b/Misc/NEWS.d/next/Library/2019-08-12-17-21-10.bpo-37788.F0tR05.rst +new file mode 100644 +index 0000000000000..d9b1e82b92238 +--- /dev/null ++++ b/Misc/NEWS.d/next/Library/2019-08-12-17-21-10.bpo-37788.F0tR05.rst +@@ -0,0 +1 @@ ++Fix a reference leak if a thread is not joined. diff --git a/python3.spec b/python3.spec index e3c5ae9..8d2c9f8 100644 --- a/python3.spec +++ b/python3.spec @@ -3,7 +3,7 @@ Summary: Interpreter of the Python3 programming language URL: https://www.python.org/ Version: 3.7.9 -Release: 5 +Release: 6 License: Python %global branchversion 3.7 @@ -104,6 +104,7 @@ Patch317: CVE-2019-17514.patch Patch318: CVE-2019-9674.patch Patch319: python3-add-generic-os-support.patch Patch320: CVE-2020-27619.patch +Patch321: backport-Fix-a-reference-leak-if-a-thread-is-not-joined.patch Recommends: %{name}-help = %{version}-%{release} Provides: python%{branchversion} = %{version}-%{release} @@ -195,6 +196,7 @@ rm Lib/ensurepip/_bundled/*.whl %patch318 -p1 %patch319 -p1 %patch320 -p1 +%patch321 -p1 sed -i "s/generic_os/%{_vendor}/g" Lib/platform.py rm configure pyconfig.h.in @@ -796,6 +798,12 @@ export BEP_GTDLIST="$BEP_GTDLIST_TMP" %{_mandir}/*/* %changelog +* Mon Feb 01 2021 shixuantong - 3.7.9-6 +- Type:bugfix +- ID:NA +- SUG:NA +- DESC:Fix a reference leak if a thread is not joined + * Sat Nov 14 2020 shixuantong - 3.7.9-5 - Type:cves - ID:CVE-2020-27619 -- Gitee