Skip to content

fix(multi-review): 修复内存泄露#114

Merged
Svtter merged 1 commit into
mainfrom
fix-memory-leak
May 25, 2026
Merged

fix(multi-review): 修复内存泄露#114
Svtter merged 1 commit into
mainfrom
fix-memory-leak

Conversation

@Svtter
Copy link
Copy Markdown
Collaborator

@Svtter Svtter commented May 25, 2026

将 session 删除逻辑移到 finally 块中,确保无论成功还是失败路径都会清理 session,防止 opencode server 端内存泄露。

Move session deletion into finally blocks so that sessions are always
deleted regardless of whether the review/coordinator succeeds or fails.

Previously, if a session was created successfully but a subsequent
prompt() or messages() call threw or timed out, the catch block would
return/throw without deleting the session, causing a memory leak on
the opencode server.
@github-actions
Copy link
Copy Markdown

可合并

所有四名 reviewer(质量、安全、性能、架构)一致认为该 PR 将 session 清理移至 finally 块并移除无意义的 catch-rethrow,是纯改进,无任何问题。

阻塞项:无
建议项:无


📋 各 Reviewer 详细审查结果
quality

可合并

该 PR 将 session 清理从 try 块内和内联 try-catch 移入 finally 块,确保在成功和异常路径下都能释放资源。

阻塞项:无

建议项:无

security

安全无虞

该 PR 将 session 清理逻辑从 try 的成功路径移至 finally 块中,确保无论在成功还是异常路径下,session 资源都能被回收。这是对原代码的安全性改进(修复了资源泄漏问题),未引入任何新的安全风险。

阻塞项:无

建议项:无

performance

性能良好

本次 PR 将 sessionId 提升至 try 块外部声明,并将 session 清理(client.session.delete)从 try 块移至 finally 块中执行。这是正确的资源管理改进,不存在性能退化

具体分析:

  • 原来在异常路径上 session 不会被清理,导致资源泄漏;现在 finally 保证无论成功还是失败都释放 session,降低了服务端长期资源占用。
  • runCoordinator 中还移除了无意义的 catch (err) { throw err; }(空兜圈),减少了一条不必要的异常处理路径。
  • 成功路径上 cleanup 的执行时机与之前一致(return 前执行),没有额外开销。
  • 未引入新的循环、内存分配、数据库查询、锁竞争或并发问题。

阻塞项:无
建议项:无

architecture

架构合理

本次 PR 将 session 清理从 try 块末尾移至 finally 块,确保异常路径也能释放资源,同时移除了 coordinator 中无意义的 catch-rethrow。改动范围局限在单个文件的同类模式,功能内聚,不引入新依赖,不改变接口签名,符合资源管理的标准实践。

阻塞项:无

建议项:无

@github-actions
Copy link
Copy Markdown

分析结果

无遗漏

该 PR 是针对性修复,目标明确:将 orchestrator.ts 中 session 清理逻辑从成功路径移到 finally 块。改动完全覆盖了规格要求:

  • runParallelReviewers: 旧代码仅在成功路径(return 前)清理 session,失败路径的 catch 直接 return 导致泄露。新代码将 sessionId 提升到 try 外部,finally 中统一清理,成功/失败均覆盖。
  • runCoordinator: 旧代码仅在成功路径清理,catch 块仅 throw err(无清理)。新代码替换为 finally 块,确保无论成功还是异常退出都执行 session.delete

两条路径的边界条件都已正确处理:

  • session.create 失败 → sessionIdundefined → finally 跳过清理
  • session.delete 自身失败 → 内层 try/catch 静默忽略

没有遗漏。

New%20session%20-%202026-05-25T03%3A45%3A26.543Z
opencode session  |  github run

@Svtter Svtter merged commit 70faff0 into main May 25, 2026
3 checks passed
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