Skip to content

fix(acp): Fix memory leak in session event streams#9146

Open
sauerdaniel wants to merge 1 commit intoanomalyco:devfrom
sauerdaniel:pr/memory-acp
Open

fix(acp): Fix memory leak in session event streams#9146
sauerdaniel wants to merge 1 commit intoanomalyco:devfrom
sauerdaniel:pr/memory-acp

Conversation

@sauerdaniel
Copy link
Contributor

@sauerdaniel sauerdaniel commented Jan 17, 2026

Summary

Fix ACP session resource cleanup to prevent stale session state and leaked per-session resources.

Fixes #9154
Relates to #5363

Problem

ACP sessions were not fully cleaned up when sessions were deleted, leaving stale entries in session maps and per-session permission queues.

Solution

  • Handle session-deleted events by explicitly closing the session
  • Add closeSession(sessionId) in ACP agent to remove session state + permission queue entries
  • Add agent dispose() cleanup path to clear remaining session state and abort global event stream
  • Add delete()/clear() helpers to ACPSessionManager

Changes

  • packages/opencode/src/acp/agent.ts
  • packages/opencode/src/acp/session.ts

Testing

  • TypeScript compilation passes (bun turbo typecheck)
  • Unit tests pass

AI-Assisted

Yes

@github-actions
Copy link
Contributor

Thanks for your contribution!

This PR doesn't have a linked issue. All PRs must reference an existing issue.

Please:

  1. Open an issue describing the bug/feature (if one doesn't exist)
  2. Add Fixes #<number> or Closes #<number> to this PR description

See CONTRIBUTING.md for details.

@github-actions
Copy link
Contributor

The following comment was made by an LLM, it may be inaccurate:

No duplicate PRs found

@sauerdaniel
Copy link
Contributor Author

Rebased onto latest dev and resolved merge conflicts.\n\nChanges adapted to the current architecture:\n- Added delete() and clear() methods to ACPSessionManager\n- Added dispose() method to Agent (aborts global event stream, clears sessions)\n- Added closeSession() method for per-session cleanup\n- Added handler for session.deleted event to auto-cleanup sessions\n- Removed per-session abortController from types (using global eventAbort pattern)\n\nAll typechecks pass. Ready for review.

Add cleanup mechanism for ACP session map and event streams to prevent
unbounded growth. Implements proper session lifecycle management.
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.

Memory leak: ACP session event streams never aborted

1 participant

Comments