From 94f1abf89cb17a9d739eb96a7f3c6eab03a8e14c Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Wed, 24 Sep 2025 10:21:42 +0800 Subject: [PATCH] test(tui_spec): avoid dangling Nvim processes on test failure (#35900) Also don't wait indefinitely for all Nvim processes to exit. --- test/functional/terminal/tui_spec.lua | 13 ++++++++----- test/functional/testnvim.lua | 13 ++++++++++++- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/test/functional/terminal/tui_spec.lua b/test/functional/terminal/tui_spec.lua index 0c0f20d78a..db07669fb9 100644 --- a/test/functional/terminal/tui_spec.lua +++ b/test/functional/terminal/tui_spec.lua @@ -3820,6 +3820,10 @@ describe('TUI client', function() it('connects to remote instance (with its own TUI)', function() local server_super = n.new_session(false) local client_super = n.new_session(true) + finally(function() + server_super:close() + client_super:close() + end) set_session(server_super) local server_pipe = new_pipename() @@ -3894,14 +3898,15 @@ describe('TUI client', function() screen_client:expect({ any = 'GUI Running: 0' }) feed_data(':q!\n') - - server_super:close() - client_super:close() end) it('connects to remote instance (--headless)', function() local server = n.new_session(false) local client_super = n.new_session(true, { env = { NVIM_LOG_FILE = testlog } }) + finally(function() + client_super:close() + server:close() + end) set_session(server) local server_pipe = api.nvim_get_vvar('servername') @@ -3971,8 +3976,6 @@ describe('TUI client', function() feed_data(':echo "GUI Running: " .. has("gui_running")\013') screen_client:expect({ any = 'GUI Running: 0' }) - client_super:close() - server:close() if is_os('mac') then assert_log('uv_tty_set_mode failed: Unknown system error %-102', testlog) end diff --git a/test/functional/testnvim.lua b/test/functional/testnvim.lua index 51ba6f1354..0449d3d5dc 100644 --- a/test/functional/testnvim.lua +++ b/test/functional/testnvim.lua @@ -519,15 +519,26 @@ function M.new_session(keep, ...) n_processes = n_processes + 1 local new_session = Session.new(proc) + -- Make it possible to check whether two sessions are from the same test. new_session.data = { test_id = test_id } return new_session end busted.subscribe({ 'suite', 'end' }, function() M.check_close(true) - while n_processes > 0 do + local timed_out = false + local timer = assert(vim.uv.new_timer()) + timer:start(10000, 0, function() + timed_out = true + end) + while n_processes > 0 and not timed_out do uv.run('once') end + timer:close() + if timed_out then + print(('warning: %d dangling Nvim processes'):format(n_processes)) + io.stdout:flush() + end end) --- Starts a (non-RPC, `--headless --listen "Tx"`) Nvim process, waits for exit, and returns result.