mirror of https://github.com/python/cpython
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()
This commit is contained in:
parent
5fe59f8e3a
commit
bc61315377
|
@ -54,8 +54,10 @@ class _WorkItem(object):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
result = self.fn(*self.args, **self.kwargs)
|
result = self.fn(*self.args, **self.kwargs)
|
||||||
except BaseException as e:
|
except BaseException as exc:
|
||||||
self.future.set_exception(e)
|
self.future.set_exception(exc)
|
||||||
|
# Break a reference cycle with the exception 'exc'
|
||||||
|
self = None
|
||||||
else:
|
else:
|
||||||
self.future.set_result(result)
|
self.future.set_result(result)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
concurrent.futures: WorkItem.run() used by ThreadPoolExecutor now breaks a
|
||||||
|
reference cycle between an exception object and the WorkItem object.
|
Loading…
Reference in New Issue