summaryrefslogtreecommitdiffstats
path: root/Lib/concurrent
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2017-08-22 14:50:42 (GMT)
committerGitHub <noreply@github.com>2017-08-22 14:50:42 (GMT)
commitbc61315377056fe362b744d9c44e17cd3178ce54 (patch)
tree5bb9c1fd7e8e92230aa0f328665c45a052c43967 /Lib/concurrent
parent5fe59f8e3a0a56a155c18f9d581205ec533764b6 (diff)
downloadcpython-bc61315377056fe362b744d9c44e17cd3178ce54.zip
cpython-bc61315377056fe362b744d9c44e17cd3178ce54.tar.gz
cpython-bc61315377056fe362b744d9c44e17cd3178ce54.tar.bz2
bpo-31249: Fix ref cycle in ThreadPoolExecutor (#3178)
* bpo-31249: Fix ref cycle in ThreadPoolExecutor concurrent.futures: WorkItem.run() used by ThreadPoolExecutor now breaks a reference cycle between an exception object and the WorkItem object. ThreadPoolExecutor.shutdown() now also clears its threads set. * shutdown() now only clears threads if wait is true. * Revert changes on shutdown()
Diffstat (limited to 'Lib/concurrent')
-rw-r--r--Lib/concurrent/futures/thread.py6
1 files changed, 4 insertions, 2 deletions
diff --git a/Lib/concurrent/futures/thread.py b/Lib/concurrent/futures/thread.py
index 1f0a1d4..0b5d537 100644
--- a/Lib/concurrent/futures/thread.py
+++ b/Lib/concurrent/futures/thread.py
@@ -54,8 +54,10 @@ class _WorkItem(object):
try:
result = self.fn(*self.args, **self.kwargs)
- except BaseException as e:
- self.future.set_exception(e)
+ except BaseException as exc:
+ self.future.set_exception(exc)
+ # Break a reference cycle with the exception 'exc'
+ self = None
else:
self.future.set_result(result)