diff --git a/src/services/streamable.ts b/src/services/streamable.ts index 42ab0b0..1aa1c07 100644 --- a/src/services/streamable.ts +++ b/src/services/streamable.ts @@ -77,20 +77,31 @@ export const startHTTPStreamableServer = async ( }); // Handle the server close event. + let isTransportClosed = false; + let isServerClosed = false; + transport.onclose = async () => { + if (isTransportClosed) { + Logger.warn("Transport already closed, skipping onclose handler to avoid infinite recursion"); + return; // Prevent re-entrancy + }; + + isTransportClosed = true; + const sid = transport.sessionId; if (sid && activeTransports[sid]) { - try { - await server?.close(); - } catch (error) { - Logger.error("Error closing server", error); + // Optionally close the server, but guard against recursion + if (!isServerClosed) { + try { + await server.close(); + isServerClosed = true; + } catch (error) { + Logger.error("Error closing server", error); + } } - - // delete used transport and server to avoid memory leak. delete activeTransports[sid]; } }; - // Create the server try { server = createServer();