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:
|
||||
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)
|
||||
|
||||
|
|
|
@ -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