Skip to content

Commit

Permalink
pythongH-80788: remove old weakset workaround for thread safety (pyth…
Browse files Browse the repository at this point in the history
  • Loading branch information
kumaraditya303 authored and ryan-duve committed Aug 27, 2024
1 parent 9729ae8 commit ee960c1
Showing 1 changed file with 2 additions and 17 deletions.
19 changes: 2 additions & 17 deletions Lib/asyncio/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()}


Expand Down

0 comments on commit ee960c1

Please sign in to comment.