Skip to content

fix(windows): 重启停止后复核调试端口改为有限等待暂态监听者,超时附脱敏身份摘要(#3074) - #3081

Open
koeria wants to merge 2 commits into
BigPizzaV3:mainfrom
koeria:fix/issue-3074
Open

koeria wants to merge 2 commits into
BigPizzaV3:mainfrom
koeria:fix/issue-3074

Conversation

@koeria

@koeria koeria commented Nov 12, 2026

Copy link
Copy Markdown
Contributor

问题(#3074)

Windows 重启 Codex 时,停止后复核在调试端口仍有监听者时一次性 ensure! 直接失败:既不等本实例正在退出的暂态监听者,也不记录监听者身份,导致「旧窗口已关闭但不再启动新实例」,只能手动结束残留进程。与 #3010(停止前入口/进程身份不匹配,PR #3048)不同,这里明确走到了停止后的端口复核,是一个独立缺陷;核实 main 与 v2.6.4/v2.6.7 均未修复。

修复

  • ensure_debug_port_released:停止后复核改为在 RESTART_STOP_WAIT_TIMEOUT_MS 内有限轮询,暂态监听者(例如同实例正在退出的残留进程)退出后继续;超时仍占用才失败,不放宽进程归属保护,也不停止未知归属的监听者。
  • 失败信息附上监听者脱敏身份摘要(PID 与映像文件名,不含完整路径/参数),新增 windows_integration::loopback_listener_summaries,消息明确显示「旧窗口已关闭,未启动新实例」及可执行的恢复操作。
  • 复核失败时后续清理仍不执行,行为与现状一致(等旧会话自行收尾),只是不再误杀/等待未知占用者。

测试

  • 新增 3 个单测(Linux 可跑):暂态监听者退出后通过复核;超时失败信息包含监听者数量、PID 与映像名及「旧窗口已关闭,未启动新实例」;监听者查询错误照常传播。本地 cargo test -p codex-plus-core --lib watcher::windows_main_stop 35 passed(含新增 3 项)。
  • Windows 真实路径(loopback_listener_summaries 走 OpenProcess/QueryFullProcessImageNameW)本地沙盒无法执行,依赖 CI 的 Windows 任务覆盖;沙盒内存/网络受限,本次仅跑目标模块单测。

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant