mirror of
https://github.com/neovim/neovim.git
synced 2024-12-19 10:45:16 -07:00
fix(vim.system): don't process non-fast events during wait() (#27300)
Problem: Processing non-fast events during SystemObj:wait() may cause two pieces of code to interfere with each other, and is different from jobwait(). Solution: Don't process non-fast events during SystemObj:wait().
This commit is contained in:
parent
e98decf9a6
commit
9b7cf4f0be
@ -94,14 +94,14 @@ function SystemObj:wait(timeout)
|
||||
|
||||
local done = vim.wait(timeout or state.timeout or MAX_TIMEOUT, function()
|
||||
return state.result ~= nil
|
||||
end)
|
||||
end, nil, true)
|
||||
|
||||
if not done then
|
||||
-- Send sigkill since this cannot be caught
|
||||
self:_timeout(SIG.KILL)
|
||||
vim.wait(timeout or state.timeout or MAX_TIMEOUT, function()
|
||||
return state.result ~= nil
|
||||
end)
|
||||
end, nil, true)
|
||||
end
|
||||
|
||||
return state.result
|
||||
|
@ -104,4 +104,18 @@ describe('vim.system', function()
|
||||
assert(signal == 2)
|
||||
]])
|
||||
end)
|
||||
|
||||
it('SystemObj:wait() does not process non-fast events #27292', function()
|
||||
eq(
|
||||
false,
|
||||
exec_lua([[
|
||||
_G.processed = false
|
||||
local cmd = vim.system({ 'sleep', '1' })
|
||||
vim.schedule(function() _G.processed = true end)
|
||||
cmd:wait()
|
||||
return _G.processed
|
||||
]])
|
||||
)
|
||||
eq(true, exec_lua([[return _G.processed]]))
|
||||
end)
|
||||
end)
|
||||
|
Loading…
Reference in New Issue
Block a user