In async def handle_async_request(self, request: Request) -> Response: there are such lines:
async with self._pool_lock:
self._requests.append(status)
await self._close_expired_connections()
await self._attempt_to_acquire_connection(status)
There is a probability that the coroutine got canceled after self._requests.append(status) but before await self._attempt_to_acquire_connection. Since these few lines are not protected against canceling nor having cleaning up on exception, it may leave a status stayed in _requests forever, blocking all future connection = await status.wait_for_connection(timeout=timeout) which is a few lines after.