Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commita3ba8dd

Browse files
committed
gh-133141: Fix race in test_async_global_awaited_by
Signed-off-by: Pablo Galindo <pablogsal@gmail.com>
1 parent1d9406e commita3ba8dd

File tree

1 file changed

+12
-12
lines changed

1 file changed

+12
-12
lines changed

‎Lib/test/test_external_inspection.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
importsys
66
importsocket
77
fromunittest.mockimportANY
8-
fromtest.supportimportos_helper,SHORT_TIMEOUT,busy_retry,requires_gil_enabled
8+
fromtest.supportimportos_helper,SHORT_TIMEOUT,busy_retry
99
fromtest.support.script_helperimportmake_script
1010
fromtest.support.socket_helperimportfind_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"andnotPROCESS_VM_READV_SUPPORTED,
411410
"Test only runs on Linux with process_vm_readv support")
412411
deftest_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_inrange(1000):
496+
expected_response=b"ready"
497+
response=client_socket.recv(len(expected_response))
498+
self.assertEqual(response,expected_response)
494499
for_inbusy_retry(SHORT_TIMEOUT):
495500
try:
496501
all_awaited_by=get_all_awaited_by(p.pid)
@@ -527,12 +532,7 @@ async def main():
527532
expected_stack= [[['_aexit','__aexit__','echo_client_spam'],ANY]]
528533
tasks_with_stack= [taskfortaskinentriesiftask[2]==expected_stack]
529534
self.assertGreaterEqual(len(tasks_with_stack),1000)
530-
531-
# the final task will have some random number, but it should for
532-
# sure be one of the echo client spam horde (In windows this is not true
533-
# for some reason)
534-
ifsys.platform!="win32":
535-
self.assertEqual([[['_aexit','__aexit__','echo_client_spam'],ANY]],entries[-1][2])
535+
self.assertEqual([[['_aexit','__aexit__','echo_client_spam'],ANY]],entries[-1][2])
536536
exceptPermissionError:
537537
self.skipTest(
538538
"Insufficient permissions to read the stack trace")

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp