Open
Description
This is a tracking issue for a potential issue noticed in #414 (comment)
Problem
proc.on('close')
does not always trigger on nvim.quit()
. Based on the failures demonstrated in #418, it appears that sometimes the child (nvim
) does not close the stderr pipe:
expect(received).toStrictEqual(expected) // deep equality
- Expected - 1
+ Received + 1
Object {
"errors": 0,
- "stderrClosed": true,
+ "stderrClosed": false,
"stdoutClosed": true,
}
172 | // TODO: 'close' event sometimes does not emit. #414
173 | proc.on('exit', () => {
> 174 | expect(r).toStrictEqual({
| ^
175 | stdoutClosed: true,
176 | stderrClosed: true,
177 | errors: 0,
at ChildProcess.toStrictEqual (src/attach/attach.test.ts:174:17)
Solution
- document that
proc.on('close')
is unreliable. - document
proc.on('exit')
as a workaround. - fix the issue(?) in Nvim itself. I thought it might be related to this: https://github.com/neovim/neovim/blob/c4762b309714897615607f135aab9d7bcc763c4f/src/nvim/channel.c#L168-L171
but, forcing
// Don't close on exit, in case late error messages if (!exiting) { fclose(stderr); }
fclose(stderr)
does not pass the tests in this PR. Nor does addingfclose(stderr)
anywhere else AFAICT.