@@ -1471,6 +1471,60 @@ def matches_awaited_by_pattern(task):
14711471 finally :
14721472 _cleanup_sockets (client_socket , server_socket )
14731473
1474+ @skip_if_not_supported
1475+ @unittest .skipIf (
1476+ sys .platform == "linux" and not PROCESS_VM_READV_SUPPORTED ,
1477+ "Test only runs on Linux with process_vm_readv support" ,
1478+ )
1479+ def test_async_global_awaited_by_skips_set_tombstones (self ):
1480+ script_body = """\
1481+ import asyncio
1482+
1483+ class RemovedTask(asyncio.Task):
1484+ def __hash__(self):
1485+ return 0
1486+
1487+ class RemainingTask(asyncio.Task):
1488+ def __hash__(self):
1489+ return 1
1490+
1491+ async def wait_forever():
1492+ await asyncio.Event().wait()
1493+
1494+ async def main():
1495+ victim = asyncio.create_task(wait_forever(), name="victim")
1496+ removed = RemovedTask(wait_forever(), name="removed")
1497+ remaining = RemainingTask(wait_forever(), name="remaining")
1498+
1499+ asyncio.future_add_to_awaited_by(victim, removed)
1500+ asyncio.future_add_to_awaited_by(victim, remaining)
1501+
1502+ # Put a dummy in slot 0 before the only active entry in
1503+ # slot 1. It must not count toward the set's used entries.
1504+ asyncio.future_discard_from_awaited_by(victim, removed)
1505+
1506+ sock.sendall(b"ready")
1507+ sock.recv(16)
1508+
1509+ asyncio.run(main())
1510+ """
1511+
1512+ with self ._target_process (script_body ) as (p , client_socket , _ ):
1513+ _wait_for_signal (client_socket , b"ready" )
1514+
1515+ all_awaited_by = get_all_awaited_by (p .pid )
1516+ tasks_by_name = {
1517+ task .task_name : task
1518+ for task in self ._get_task_id_map (all_awaited_by ).values ()
1519+ }
1520+ victim = tasks_by_name ["victim" ]
1521+ remaining = tasks_by_name ["remaining" ]
1522+ self .assertEqual (
1523+ [waiter .task_name for waiter in victim .awaited_by ],
1524+ [remaining .task_id ],
1525+ )
1526+ client_socket .sendall (b"done" )
1527+
14741528 @skip_if_not_supported
14751529 @unittest .skipIf (
14761530 sys .platform == "linux" and not PROCESS_VM_READV_SUPPORTED ,
0 commit comments