Skip to content

mcp: cancel pending keepalive ping when the session closes - #1478

Merged
guglielmo-san merged 1 commit into
modelcontextprotocol:mainfrom
vshalpnjabi:fix-keepalive-ping-on-close
Oct 29, 2026
Merged

guglielmo-san merged 1 commit into
modelcontextprotocol:mainfrom
vshalpnjabi:fix-keepalive-ping-on-close

Conversation

@vshalpnjabi

Copy link
Copy Markdown
Contributor

startKeepalive derived each ping's context from context.Background, so stopping the keepalive didn't reach a ping already in flight. Closing a session whose peer had stopped answering (for example on a client DELETE) then waited up to KeepAlive/2 for the ping to time out and logged it as a keepalive failure.

This derives the ping context from the keepalive context and stops the loop without counting a failure when that context is cancelled. TestStartKeepalive_CancelStopsPendingPing covers both parts: it fails without the change, and still fails with only the context change.

With the repro from the issue, the DELETE now returns in about 1ms instead of 1.001s, with nothing logged. go test ./... and go vet ./... pass.

Fixes #1470

AI-assisted; I reviewed the full diff and ran the tests myself.

startKeepalive derived each ping's context from context.Background,
so cancelling the keepalive did not reach a ping already in flight.
Closing a session whose peer had stopped answering, such as on a
client DELETE, then waited up to KeepAlive/2 for the ping to time out
and logged it as a keepalive failure.

Derive the ping context from the keepalive context, and stop the loop
without counting a failure when that context has been cancelled.

Fixes #1470
@guglielmo-san
guglielmo-san merged commit 46a62b3 into modelcontextprotocol:main Oct 29, 2026
10 checks passed
@guglielmo-san

Copy link
Copy Markdown
Contributor

@vshalpnjabi thank you for the contribution!

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.

mcp: a client DELETE waits for a pending keepalive ping

2 participants