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

This commit is contained in:
zeertzjq
2025-09-13 20:53:17 +08:00
committed by GitHub
parent f89e1eb036
commit 4a69847df4
2 changed files with 17 additions and 2 deletions

View File

@@ -648,8 +648,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

@@ -2382,6 +2382,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')