!37 Fix a reference leak if a thread is not joined
From: @tong_1001 Reviewed-by: @overweight Signed-off-by: @overweight
This commit is contained in:
commit
558bd969ff
@ -0,0 +1,63 @@
|
|||||||
|
From d3dcc92778807ae8f7ebe85178f36a29711cd478 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Victor Stinner <vstinner@redhat.com>
|
||||||
|
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.
|
||||||
10
python3.spec
10
python3.spec
@ -3,7 +3,7 @@ Summary: Interpreter of the Python3 programming language
|
|||||||
URL: https://www.python.org/
|
URL: https://www.python.org/
|
||||||
|
|
||||||
Version: 3.7.9
|
Version: 3.7.9
|
||||||
Release: 5
|
Release: 6
|
||||||
License: Python
|
License: Python
|
||||||
|
|
||||||
%global branchversion 3.7
|
%global branchversion 3.7
|
||||||
@ -104,6 +104,7 @@ Patch317: CVE-2019-17514.patch
|
|||||||
Patch318: CVE-2019-9674.patch
|
Patch318: CVE-2019-9674.patch
|
||||||
Patch319: python3-add-generic-os-support.patch
|
Patch319: python3-add-generic-os-support.patch
|
||||||
Patch320: CVE-2020-27619.patch
|
Patch320: CVE-2020-27619.patch
|
||||||
|
Patch321: backport-Fix-a-reference-leak-if-a-thread-is-not-joined.patch
|
||||||
|
|
||||||
Recommends: %{name}-help = %{version}-%{release}
|
Recommends: %{name}-help = %{version}-%{release}
|
||||||
Provides: python%{branchversion} = %{version}-%{release}
|
Provides: python%{branchversion} = %{version}-%{release}
|
||||||
@ -195,6 +196,7 @@ rm Lib/ensurepip/_bundled/*.whl
|
|||||||
%patch318 -p1
|
%patch318 -p1
|
||||||
%patch319 -p1
|
%patch319 -p1
|
||||||
%patch320 -p1
|
%patch320 -p1
|
||||||
|
%patch321 -p1
|
||||||
|
|
||||||
sed -i "s/generic_os/%{_vendor}/g" Lib/platform.py
|
sed -i "s/generic_os/%{_vendor}/g" Lib/platform.py
|
||||||
rm configure pyconfig.h.in
|
rm configure pyconfig.h.in
|
||||||
@ -796,6 +798,12 @@ export BEP_GTDLIST="$BEP_GTDLIST_TMP"
|
|||||||
%{_mandir}/*/*
|
%{_mandir}/*/*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Feb 01 2021 shixuantong<shixuantong@huawei.com> - 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<shixuantong@huawei.com> - 3.7.9-5
|
* Sat Nov 14 2020 shixuantong<shixuantong@huawei.com> - 3.7.9-5
|
||||||
- Type:cves
|
- Type:cves
|
||||||
- ID:CVE-2020-27619
|
- ID:CVE-2020-27619
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user