unreliable proc.on('close') event
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 537
- Forks
- 57
- Avg merge
- 1h 6m
- Merged PRs (30d)
- 6
Description
This is a tracking issue for a potential issue noticed in https://github.com/neovim/node-client/pull/414#discussion_r1796637402
Problem
proc.on('close') does not always trigger on nvim.quit(). Based on the failures demonstrated in https://github.com/neovim/node-client/pull/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.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with src/attach/attach.test.ts around the failing proc.on('exit') assertion and review the linked discussions in pull requests 414 and 418. Determine whether the issue should be resolved through node-client documentation, a reliable event-handling change, or an Nvim fix; done means the stderr/close behavior is established and the relevant test or documentation reflects it.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- nodejs, typescript
- Domain
- backend, devtools
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100