Add race case handling for mp backend

pdb_madness
Tyler Goodlet 2020-12-12 13:29:22 -05:00
parent d497078eb7
commit 0118589875
2 changed files with 12 additions and 3 deletions

View File

@ -39,7 +39,8 @@ async def main():
portal = await n.run_in_actor('spawner0', spawn_until, depth=0) portal = await n.run_in_actor('spawner0', spawn_until, depth=0)
portal1 = await n.run_in_actor('spawner1', spawn_until, depth=1) portal1 = await n.run_in_actor('spawner1', spawn_until, depth=1)
# nursery cancellation should be triggered due to propagated error # nursery cancellation should be triggered due to propagated
# error from child.
await portal.result() await portal.result()
await portal1.result() await portal1.result()

View File

@ -365,7 +365,7 @@ def test_multi_nested_subactors_error_through_nurseries(spawn):
assert "NameError" in before assert "NameError" in before
def test_root_nursery_cancels_before_child_releases_tty_lock(spawn): def test_root_nursery_cancels_before_child_releases_tty_lock(spawn, start_method):
"""Test that when the root sends a cancel message before a nested """Test that when the root sends a cancel message before a nested
child has unblocked (which can happen when it has the tty lock and child has unblocked (which can happen when it has the tty lock and
is engaged in pdb) it is indeed cancelled after exiting the debugger. is engaged in pdb) it is indeed cancelled after exiting the debugger.
@ -380,7 +380,15 @@ def test_root_nursery_cancels_before_child_releases_tty_lock(spawn):
child.sendline('c') child.sendline('c')
for _ in range(4): for _ in range(4):
child.expect(r"\(Pdb\+\+\)") try:
child.expect(r"\(Pdb\+\+\)")
except TimeoutError:
if start_method == 'mp':
# appears to be some little races that might result in the
# last couple acts tearing down early
break
else:
raise
before = str(child.before.decode()) before = str(child.before.decode())
assert "NameError: name 'doggypants' is not defined" in before assert "NameError: name 'doggypants' is not defined" in before