diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2017-08-22 14:50:42 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-08-22 14:50:42 (GMT) |
commit | bc61315377056fe362b744d9c44e17cd3178ce54 (patch) | |
tree | 5bb9c1fd7e8e92230aa0f328665c45a052c43967 /Lib/concurrent | |
parent | 5fe59f8e3a0a56a155c18f9d581205ec533764b6 (diff) | |
download | cpython-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.py | 6 |
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) |