diff options
| author | Daniel Sauer <[email protected]> | 2026-01-13 19:38:34 +0100 |
|---|---|---|
| committer | Frank <[email protected]> | 2026-01-13 19:50:49 -0500 |
| commit | 4dc72669e57979b5b8840e674f25ad6b7c23e215 (patch) | |
| tree | 26ce4838d28237c38cd4a569601a6f445f384883 | |
| parent | dfa59dd21d68e723d35fb56978024ca0335ed334 (diff) | |
| download | opencode-4dc72669e57979b5b8840e674f25ad6b7c23e215.tar.gz opencode-4dc72669e57979b5b8840e674f25ad6b7c23e215.zip | |
fix(mcp): close existing client before reassignment to prevent leaks (#8253)
| -rw-r--r-- | packages/opencode/src/mcp/index.ts | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/packages/opencode/src/mcp/index.ts b/packages/opencode/src/mcp/index.ts index aca0c6631..4e0968391 100644 --- a/packages/opencode/src/mcp/index.ts +++ b/packages/opencode/src/mcp/index.ts @@ -266,6 +266,13 @@ export namespace MCP { status: s.status, } } + // Close existing client if present to prevent memory leaks + const existingClient = s.clients[name] + if (existingClient) { + await existingClient.close().catch((error) => { + log.error("Failed to close existing MCP client", { name, error }) + }) + } s.clients[name] = result.mcpClient s.status[name] = result.status @@ -523,6 +530,13 @@ export namespace MCP { const s = await state() s.status[name] = result.status if (result.mcpClient) { + // Close existing client if present to prevent memory leaks + const existingClient = s.clients[name] + if (existingClient) { + await existingClient.close().catch((error) => { + log.error("Failed to close existing MCP client", { name, error }) + }) + } s.clients[name] = result.mcpClient } } |
