python-trio / trio-asyncio

a re-implementation of the asyncio mainloop on top of Trio
Other
188 stars 38 forks source link

Deadlock on exception in call_later callback, during sleeping #104

Open shamrin opened 3 years ago

shamrin commented 3 years ago

The following deadlocks:

    @pytest.mark.trio
    async def test_raise_sleeping(self, loop):
        def raise_exc():
            raise Exception()

        async def raise_sleeping():
            loop.call_later(0.1, raise_exc)
            await asyncio.sleep(0.2)

        await trio_asyncio.aio_as_trio(raise_sleeping, loop=loop)()

It gets stuck in run_aio_future on wait_task_rescheduled after it hits abort_cb callback:

https://github.com/python-trio/trio-asyncio/blob/b93c32037804298b43cc8c089313a2ef82ca0c22/trio_asyncio/_util.py#L34-L45

The problem exist at least since release 0.11.0.

88 is potential similar.

(Extracted from #103.)