WIP reproduce deadlock issue during error from piker
parent
20d281f619
commit
faf751acac
|
@ -170,3 +170,66 @@ def test_actor_managed_trio_nursery_task_error_cancels_aio(
|
||||||
# verify boxed error
|
# verify boxed error
|
||||||
err = excinfo.value
|
err = excinfo.value
|
||||||
assert isinstance(err.type(), NameError)
|
assert isinstance(err.type(), NameError)
|
||||||
|
|
||||||
|
|
||||||
|
from trio_typing import TaskStatus
|
||||||
|
|
||||||
|
|
||||||
|
def test_nursery():
|
||||||
|
|
||||||
|
_cn = None
|
||||||
|
|
||||||
|
async def task_name_errors_and_never_startedz(
|
||||||
|
task_status: TaskStatus = trio.TASK_STATUS_IGNORED,
|
||||||
|
):
|
||||||
|
await trio.sleep(0.5)
|
||||||
|
|
||||||
|
# pet pet
|
||||||
|
doggy()
|
||||||
|
|
||||||
|
# we never get here due to name error
|
||||||
|
task_status.started()
|
||||||
|
|
||||||
|
async def waits_on_signal(
|
||||||
|
ev: trio.Event(),
|
||||||
|
task_status: TaskStatus[trio.Nursery] = trio.TASK_STATUS_IGNORED,
|
||||||
|
):
|
||||||
|
await ev.wait()
|
||||||
|
task_status.started()
|
||||||
|
|
||||||
|
async def start_cn_tasks(
|
||||||
|
# pn: trio.Nursery,
|
||||||
|
task_status: TaskStatus[trio.Nursery] = trio.TASK_STATUS_IGNORED,
|
||||||
|
):
|
||||||
|
nonlocal _cn
|
||||||
|
assert _cn
|
||||||
|
|
||||||
|
ev = trio.Event()
|
||||||
|
|
||||||
|
_cn.start_soon(task_never_starteds)
|
||||||
|
await _cn.start(waits_on_signal, ev)
|
||||||
|
task_status.started()
|
||||||
|
|
||||||
|
async def mk_cn(
|
||||||
|
task_status: TaskStatus = trio.TASK_STATUS_IGNORED,
|
||||||
|
):
|
||||||
|
nonlocal _cn
|
||||||
|
|
||||||
|
async with trio.open_nursery() as cn:
|
||||||
|
_cn = cn
|
||||||
|
|
||||||
|
task_status.started(cn)
|
||||||
|
await trio.sleep_forever()
|
||||||
|
|
||||||
|
async def main():
|
||||||
|
async with (
|
||||||
|
trio.open_nursery() as pn,
|
||||||
|
):
|
||||||
|
cn = await pn.start(mk_cn)
|
||||||
|
assert cn
|
||||||
|
|
||||||
|
# start a parent level task which starts a task
|
||||||
|
pn.start_soon(start_cn_tasks)
|
||||||
|
await trio.sleep_forever()
|
||||||
|
|
||||||
|
trio.run(main)
|
||||||
|
|
Loading…
Reference in New Issue