Skip to content

Commit cf6a2e9

Browse files
authored
fix(srv/stream): properly remove sessionTool to prevent memory leak (#365)
1 parent 564b669 commit cf6a2e9

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

server/streamable_http.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -465,7 +465,7 @@ func (s *StreamableHTTPServer) handleDelete(w http.ResponseWriter, r *http.Reque
465465
}
466466

467467
// remove the session relateddata from the sessionToolsStore
468-
s.sessionTools.set(sessionID, nil)
468+
s.sessionTools.delete(sessionID)
469469

470470
// remove current session's requstID information
471471
s.sessionRequestIDs.Delete(sessionID)
@@ -533,6 +533,12 @@ func (s *sessionToolsStore) set(sessionID string, tools map[string]ServerTool) {
533533
s.tools[sessionID] = tools
534534
}
535535

536+
func (s *sessionToolsStore) delete(sessionID string) {
537+
s.mu.Lock()
538+
defer s.mu.Unlock()
539+
delete(s.tools, sessionID)
540+
}
541+
536542
// streamableHttpSession is a session for streamable-http transport
537543
// When in POST handlers(request/notification), it's ephemeral, and only exists in the life of the request handler.
538544
// When in GET handlers(listening), it's a real session, and will be registered in the MCP server.

0 commit comments

Comments
 (0)