peer-link: closing a displaced server unlinks the winner's socket
还没有人认领这个 Issue。
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 40/100
- Issue 类型
- 缺陷
- 描述清晰度
- 描述清楚
- 活跃度
- 活跃
- 技术栈
- node.js, typescript
调研方向
The bug is in vscode-ext/src/peer-link.ts, specifically the closeServer function. Start by reading the linked libuv source to understand uv__pipe_close's behavior. Reproduce the race condition with Node 26.9 as described. The fix likely involves creating a unique socket path and using link() atomically, so study Node's fs module for atomic operations. Check docs/specs/vscode.md for the brokerConfirmed logic to understand the broader context.
由索引模型根据 Issue 内容生成。
描述
closeServer in vscode-ext/src/peer-link.ts documents "Unlink only when the path still names our socket", but unlink only gates the explicit rm. closing.close() unlinks the path on its own: libuv's uv__pipe_close unlinks pipe_fname unconditionally. Reproduced on Node 26.9: A binds, B unlinks and rebinds, A.close() removes B's socket.
So the reclaim stand-down (closeServer(false)) removes the winner's socket too, not only disposal. Trace (from the #753 review):
- A and B both clear the corpse; B displaces A. Both are inside
stillOurs, and A's 250 ms expires first. - A mismatches and stands down:
A.close()unlinks the path, which now names B's socket. - If B's stat landed before that unlink, B confirms and serves an unreachable socket. A's next round
tryBinds the free path uncontested and confirms immediately. That leaves two confirmed brokers, whichbrokerConfirmedexists to prevent (docs/specs/vscode.md→ "A bind is not a role until it is believed").
A likely fix direction is an atomic create-only publish: bind a unique path, then link() it onto the fixed one, which fails EEXIST instead of displacing. The unique path is then the one libuv unlinks on close.
Surfaced in #753, which narrows a different race and doesn't address this.
- 主要语言
- TypeScript
- 星标
- 5
- 派生
- 1
- 平均合并
- 16 小时 56 分钟
- 30 天内合并 PR
- 253
贡献指南
这个仓库没有索引到贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
diffplug/dormouse 的其他 Issue
-
难度 4/5 3-5 天 新手友好度 35/100
-
难度 4/5 3-5 天 新手友好度 48/100
-
enhancement
难度 5/5 一周以上 新手友好度 35/100
-
enhancement
难度 5/5 一周以上 新手友好度 35/100
-
enhancement
难度 5/5 一周以上 新手友好度 35/100
查看 diffplug/dormouse 的全部 Issue
相似的 Issue
-
VerificationGate: ATTRIBUTION quote guard never matches a normal quotation (\b around the quote) 未关闭
难度 2/5 1-3 小时 新手友好度 75/100
danielmiessler/LifeOS#2234 ·
-
T: Bug
难度 2/5 1-3 小时 新手友好度 75/100
-
难度 2/5 1-3 小时 新手友好度 65/100
-
难度 1/5 1 小时以内 新手友好度 85/100
-
Mend: dependency security vulnerability untriaged
难度 2/5 1-3 小时 新手友好度 70/100