5
5
import sys
6
6
import socket
7
7
from unittest .mock import ANY
8
- from test .support import os_helper , SHORT_TIMEOUT , busy_retry , requires_gil_enabled
8
+ from test .support import os_helper , SHORT_TIMEOUT , busy_retry
9
9
from test .support .script_helper import make_script
10
10
from test .support .socket_helper import find_unused_port
11
11
@@ -406,7 +406,6 @@ async def main():
406
406
self .assertEqual (stack_trace , expected_stack_trace )
407
407
408
408
@skip_if_not_supported
409
- @requires_gil_enabled ("gh-133359: occasionally flaky on AMD64" )
410
409
@unittest .skipIf (sys .platform == "linux" and not PROCESS_VM_READV_SUPPORTED ,
411
410
"Test only runs on Linux with process_vm_readv support" )
412
411
def test_async_global_awaited_by (self ):
@@ -447,6 +446,8 @@ async def echo_client(message):
447
446
assert message == data.decode()
448
447
writer.close()
449
448
await writer.wait_closed()
449
+ # Signal we are ready to sleep
450
+ sock.sendall(b"ready")
450
451
await asyncio.sleep(SHORT_TIMEOUT)
451
452
452
453
async def echo_client_spam(server):
@@ -456,8 +457,10 @@ async def echo_client_spam(server):
456
457
random.shuffle(msg)
457
458
tg.create_task(echo_client("".join(msg)))
458
459
await asyncio.sleep(0)
459
- # at least a 1000 tasks created
460
- sock.sendall(b"ready")
460
+ # at least a 1000 tasks created. Each task will signal
461
+ # when is ready to avoid the race caused by the fact that
462
+ # tasks are waited on tg.__exit__ and we cannot signal when
463
+ # that happens otherwise
461
464
# at this point all client tasks completed without assertion errors
462
465
# let's wrap up the test
463
466
server.close()
@@ -489,8 +492,10 @@ async def main():
489
492
p = subprocess .Popen ([sys .executable , script_name ])
490
493
client_socket , _ = server_socket .accept ()
491
494
server_socket .close ()
492
- response = client_socket .recv (1024 )
493
- self .assertEqual (response , b"ready" )
495
+ for _ in range (1000 ):
496
+ expected_response = b"ready"
497
+ response = client_socket .recv (len (expected_response ))
498
+ self .assertEqual (response , expected_response )
494
499
for _ in busy_retry (SHORT_TIMEOUT ):
495
500
try :
496
501
all_awaited_by = get_all_awaited_by (p .pid )
0 commit comments