diff options
author | Kumar Aditya <kumaraditya@python.org> | 2024-08-27 13:42:44 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-08-27 13:42:44 (GMT) |
commit | 460ee5b994335994d4b5186c08f44e775b3e55fa (patch) | |
tree | 47b7e3aee35134aa2fd36851864223686a3328d7 | |
parent | 03f5abf15a20f6e623282a393bc2a0affac69bb0 (diff) | |
download | cpython-460ee5b994335994d4b5186c08f44e775b3e55fa.zip cpython-460ee5b994335994d4b5186c08f44e775b3e55fa.tar.gz cpython-460ee5b994335994d4b5186c08f44e775b3e55fa.tar.bz2 |
gH-80788: remove old weakset workaround for thread safety (#123388)
-rw-r--r-- | Lib/asyncio/tasks.py | 19 |
1 files changed, 2 insertions, 17 deletions
diff --git a/Lib/asyncio/tasks.py b/Lib/asyncio/tasks.py index 2f8f4f0..2112dd4 100644 --- a/Lib/asyncio/tasks.py +++ b/Lib/asyncio/tasks.py @@ -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()} |