Skip to content

fix(everything): iterate the transports Map with for...of, not for...in - #4768

Closed
simpleqt wants to merge 1 commit into
modelcontextprotocol:mainfrom
simpleqt:fix/streamable-http-map-iteration
Closed

simpleqt wants to merge 1 commit into
modelcontextprotocol:mainfrom
simpleqt:fix/streamable-http-map-iteration

Conversation

@simpleqt

@simpleqt simpleqt commented Sep 6, 2026

Copy link
Copy Markdown

Summary

The SIGINT handler in src/everything/transports/streamableHttp.ts iterated the transports Map<string, StreamableHTTPServerTransport> with for (const sessionId in transports). for...in enumerates own enumerable properties of the object — a Map has none — so the shutdown loop never executed: active sessions were never closed on Ctrl-C and the "Closing transport for session …" log never appeared.

Switched to for (const [sessionId, transport] of transports), reusing the destructured transport instead of re-fetching it from the Map. Introduced in refactor commit 5de886c; still present at tip.

Testing

Static-analysis provable (for...in over a Map yields no entries). Manual repro: start npx server-everything streamableHttp, connect a client, send SIGINT — before the fix no close logs appear; after the fix each session transport closes.

for...in on a Map enumerates own enumerable properties of the object
(none), so the SIGINT shutdown loop never ran and active session
transports were never closed. Switched to for...of and reused the
destructured transport instead of re-fetching it.
Copilot AI balanced review requested due to automatic review settings September 6, 2026 17:47

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@cliffhall cliffhall added the closed-superseded-v2 Closed: fixed or made obsolete by the v2 / 2026-07-28 refactor (#4875) label Oct 20, 2026
@cliffhall

Copy link
Copy Markdown
Member

Thank you for this pull request, and apologies for the long wait for a response.

Since it was opened, the reference servers have been rebuilt for the 2026-07-28 MCP specification (#4857) and released as v2 (2.0.0 on npm for the TypeScript servers, 2026.10.19 on PyPI for the Python servers). The code this PR changes has been replaced, and the behavior it addresses has either been fixed in v2 or no longer exists in the same form.

This is not a judgment on the change or on you; it's a consequence of the code it targets having been replaced. If the problem still happens on v2, please open a fresh issue with the version you're running and steps to reproduce. Note that this repository now accepts contributions as issues rather than pull requests from anyone but its maintainers; see CONTRIBUTING.md.

This is part of the backlog triage in #4875.

@cliffhall cliffhall closed this Oct 20, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

closed-superseded-v2 Closed: fixed or made obsolete by the v2 / 2026-07-28 refactor (#4875)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants