Skip to content

Commit 8eaaf16

Browse files
authored
gh-91048: Relax test_async_global_awaited_by to fix flakyness (#133368)
Signed-off-by: Pablo Galindo <[email protected]>
1 parent a363675 commit 8eaaf16

File tree

1 file changed

+11
-6
lines changed

1 file changed

+11
-6
lines changed

Lib/test/test_external_inspection.py

+11-6
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import sys
66
import socket
77
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
99
from test.support.script_helper import make_script
1010
from test.support.socket_helper import find_unused_port
1111

@@ -406,7 +406,6 @@ async def main():
406406
self.assertEqual(stack_trace, expected_stack_trace)
407407

408408
@skip_if_not_supported
409-
@requires_gil_enabled("gh-133359: occasionally flaky on AMD64")
410409
@unittest.skipIf(sys.platform == "linux" and not PROCESS_VM_READV_SUPPORTED,
411410
"Test only runs on Linux with process_vm_readv support")
412411
def test_async_global_awaited_by(self):
@@ -447,6 +446,8 @@ async def echo_client(message):
447446
assert message == data.decode()
448447
writer.close()
449448
await writer.wait_closed()
449+
# Signal we are ready to sleep
450+
sock.sendall(b"ready")
450451
await asyncio.sleep(SHORT_TIMEOUT)
451452
452453
async def echo_client_spam(server):
@@ -456,8 +457,10 @@ async def echo_client_spam(server):
456457
random.shuffle(msg)
457458
tg.create_task(echo_client("".join(msg)))
458459
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
461464
# at this point all client tasks completed without assertion errors
462465
# let's wrap up the test
463466
server.close()
@@ -489,8 +492,10 @@ async def main():
489492
p = subprocess.Popen([sys.executable, script_name])
490493
client_socket, _ = server_socket.accept()
491494
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)
494499
for _ in busy_retry(SHORT_TIMEOUT):
495500
try:
496501
all_awaited_by = get_all_awaited_by(p.pid)

0 commit comments

Comments
 (0)