fix(tui): don't wait for DA1 response when stdin is closed (#35745)

(cherry picked from commit 4a69847df4)
This commit is contained in:
zeertzjq
2025-09-13 20:53:17 +08:00
committed by github-actions[bot]
parent 85e4503f18
commit 924a8e4238
2 changed files with 17 additions and 2 deletions

View File

@@ -646,8 +646,13 @@ void tui_stop(TUIData *tui)
tui->input.callbacks.primary_device_attr = tui_stop_cb;
terminfo_disable(tui);
// Wait until DA1 response is received
LOOP_PROCESS_EVENTS_UNTIL(tui->loop, tui->loop->events, EXIT_TIMEOUT_MS, tui->stopped);
// Wait until DA1 response is received, or stdin is closed (#35744).
LOOP_PROCESS_EVENTS_UNTIL(tui->loop, tui->loop->events, EXIT_TIMEOUT_MS,
tui->stopped || tui->input.read_stream.did_eof);
if (!tui->stopped && !tui->input.read_stream.did_eof) {
WLOG("TUI: timed out waiting for DA1 response");
}
tui->stopped = true;
tui_terminal_stop(tui);
stream_set_blocking(tui->input.in_fd, true); // normalize stream (#2598)

View File

@@ -2159,6 +2159,16 @@ describe('TUI', function()
screen:expect({ any = vim.pesc('[Process exited 1]') })
end)
it('exits immediately when stdin is closed #35744', function()
local chan = api.nvim_get_option_value('channel', { buf = 0 })
local pid = fn.jobpid(chan)
fn.chanclose(chan)
retry(nil, 50, function()
eq(vim.NIL, api.nvim_get_proc(pid))
end)
screen:expect({ any = vim.pesc('[Process exited 1]') })
end)
it('no stack-use-after-scope with cursor color #22432', function()
screen:set_option('rgb', true)
command('set termguicolors')