mirror of https://github.com/python/cpython
gH-80788: remove old weakset workaround for thread safety (#123388)
This commit is contained in:
parent
03f5abf15a
commit
460ee5b994
|
@ -48,23 +48,8 @@ def all_tasks(loop=None):
|
|||
# capturing the set of eager tasks first, so if an eager task "graduates"
|
||||
# to a regular task in another thread, we don't risk missing it.
|
||||
eager_tasks = list(_eager_tasks)
|
||||
# Looping over the WeakSet isn't safe as it can be updated from another
|
||||
# thread, therefore we cast it to list prior to filtering. The list cast
|
||||
# itself requires iteration, so we repeat it several times ignoring
|
||||
# RuntimeErrors (which are not very likely to occur).
|
||||
# See issues 34970 and 36607 for details.
|
||||
scheduled_tasks = None
|
||||
i = 0
|
||||
while True:
|
||||
try:
|
||||
scheduled_tasks = list(_scheduled_tasks)
|
||||
except RuntimeError:
|
||||
i += 1
|
||||
if i >= 1000:
|
||||
raise
|
||||
else:
|
||||
break
|
||||
return {t for t in itertools.chain(scheduled_tasks, eager_tasks)
|
||||
|
||||
return {t for t in itertools.chain(_scheduled_tasks, eager_tasks)
|
||||
if futures._get_loop(t) is loop and not t.done()}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue