[PATCH] Ensure restore_term works correctly with DUPLEX
- From
- James Duley via GitGitGadget <gitgitgadget@gmail.com>
- Date
- Jun 17, 2025, 18:56 UTC
- Message-ID
- <pull.2000.git.git.1750186571037.gitgitgadget@gmail.com>
From: James Duley <jagduley@gmail.com>
Previously, if save_term/restore_term was called with the DUPLEX flag and then without the flag, an assertion was hit.
> Assertion failed: hconout != INVALID_HANDLE_VALUE, > file compat/terminal.c, line 283
This is because save_term doesn't set cmode_out when not DUPLEX, so an old version of cmode_out was being used. Therefore, hconout is the correct thing for restore to check to decide whether to restore stdout console mode.
I saw this on Windows with interactive.singleKey when doing `git add -p`. Specifically, after hitting `e` to edit in vim, once on to the prompt for the next hunk, pressing any key results in the assertion.
Signed-off-by: James Duley <jagduley@gmail.com>
---
Ensure restore_term works correctly with DUPLEXPublished-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-2000%2Fparched%2Frestore-term-windows-fix-v1 Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-2000/parched/restore-term-windows-fix-v1 Pull-Request: https://github.com/git/git/pull/2000
compat/terminal.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/compat/terminal.c b/compat/terminal.c index 584f27bf7e1..72b184555ff 100644 --- a/compat/terminal.c +++ b/compat/terminal.c @@ -279,8 +279,7 @@ void restore_term(void) SetConsoleMode(hconin, cmode_in); CloseHandle(hconin); - if (cmode_out) { - assert(hconout != INVALID_HANDLE_VALUE); + if (hconout != INVALID_HANDLE_VALUE) { SetConsoleMode(hconout, cmode_out); CloseHandle(hconout); } base-commit: 16bd9f20a403117f2e0d9bcda6c6e621d3763e77
-- gitgitgadget