Skip to content

Commit

Permalink
Handle InvalidStateError during termination when using `run_in_termin…
Browse files Browse the repository at this point in the history
…al`/`patch_stdout`.

In some edge cases, during cancellation, probably when using anyio, we can get
this `InvalidStateError` during termination. This patch fixes that bug.

```
Traceback (most recent call last):
  File "/home/jonathan/git/python-prompt-toolkit/src/prompt_toolkit/application/run_in_terminal.py", line 49, in run
    async with in_terminal(render_cli_done=render_cli_done):
  File "/home/jonathan/.local/share/uv/python/cpython-3.11.10-linux-aarch64-gnu/lib/python3.11/contextlib.py", line 217, in __aexit__
    await anext(self.gen)
  File "/home/jonathan/git/python-prompt-toolkit/src/prompt_toolkit/application/run_in_terminal.py", line 114, in in_terminal
    new_run_in_terminal_f.set_result(None)
asyncio.exceptions.InvalidStateError: invalid state
```
  • Loading branch information
jonathanslenders committed Oct 4, 2024
1 parent 435bd99 commit 65de80b
Showing 1 changed file with 4 additions and 1 deletion.
5 changes: 4 additions & 1 deletion src/prompt_toolkit/application/run_in_terminal.py
Original file line number Diff line number Diff line change
Expand Up @@ -111,4 +111,7 @@ async def f():
app._request_absolute_cursor_position()
app._redraw()
finally:
new_run_in_terminal_f.set_result(None)
# (Check for `.done()`, because it can be that this future was
# cancelled.)
if not new_run_in_terminal_f.done():
new_run_in_terminal_f.set_result(None)

0 comments on commit 65de80b

Please sign in to comment.