Explorar el Código

fix(mcp): close existing client before reassignment to prevent leaks (#8253)

Daniel Sauer hace 1 mes
padre
commit
80e1173ef7
Se han modificado 1 ficheros con 14 adiciones y 0 borrados
  1. 14 0
      packages/opencode/src/mcp/index.ts

+ 14 - 0
packages/opencode/src/mcp/index.ts

@@ -266,6 +266,13 @@ export namespace MCP {
         status: s.status,
         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.clients[name] = result.mcpClient
     s.status[name] = result.status
     s.status[name] = result.status
 
 
@@ -523,6 +530,13 @@ export namespace MCP {
     const s = await state()
     const s = await state()
     s.status[name] = result.status
     s.status[name] = result.status
     if (result.mcpClient) {
     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
       s.clients[name] = result.mcpClient
     }
     }
   }
   }