From: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> Date: Mon, 2 May 2022 22:51:20 +0000 (-0700) Subject: bpo-46787: Fix `ProcessPoolExecutor exception` memory leak (GH-31408) (GH-31408) X-Git-Tag: v3.9.13~51 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=51b885a38a6cbf1d11d3c49e0d2c6532944fcd4d;p=thirdparty%2FPython%2Fcpython.git bpo-46787: Fix `ProcessPoolExecutor exception` memory leak (GH-31408) (GH-31408) Do not store `ProcessPoolExecutor` work item exception traceback that prevents exception frame locals from being garbage collected. (cherry picked from commit 9c204b148fad9742ed19b3bce173073cdec79819) Co-authored-by: themylogin --- diff --git a/Lib/concurrent/futures/process.py b/Lib/concurrent/futures/process.py index a29e5247ab85..e574299eb033 100644 --- a/Lib/concurrent/futures/process.py +++ b/Lib/concurrent/futures/process.py @@ -126,6 +126,9 @@ class _ExceptionWithTraceback: tb = traceback.format_exception(type(exc), exc, tb) tb = ''.join(tb) self.exc = exc + # Traceback object needs to be garbage-collected as its frames + # contain references to all the objects in the exception scope + self.exc.__traceback__ = None self.tb = '\n"""\n%s"""' % tb def __reduce__(self): return _rebuild_exc, (self.exc, self.tb) diff --git a/Misc/NEWS.d/next/Library/2022-02-18-20-09-29.bpo-46787.juwWc0.rst b/Misc/NEWS.d/next/Library/2022-02-18-20-09-29.bpo-46787.juwWc0.rst new file mode 100644 index 000000000000..cf167ff48115 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2022-02-18-20-09-29.bpo-46787.juwWc0.rst @@ -0,0 +1 @@ +Fix :class:`concurrent.futures.ProcessPoolExecutor` exception memory leak