From c396530298bd648e4a8ab4d36c119d07fabc5bfe Mon Sep 17 00:00:00 2001 From: 4t145 Date: Wed, 18 Jun 2025 19:43:44 +0800 Subject: [PATCH 1/2] fix: improve resource unregistration logic in LocalSessionWorker --- .../streamable_http_server/session/local.rs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/crates/rmcp/src/transport/streamable_http_server/session/local.rs b/crates/rmcp/src/transport/streamable_http_server/session/local.rs index 65adf76c..5034000c 100644 --- a/crates/rmcp/src/transport/streamable_http_server/session/local.rs +++ b/crates/rmcp/src/transport/streamable_http_server/session/local.rs @@ -328,11 +328,19 @@ impl LocalSessionWorker { if let Some(http_request_id) = self.resource_router.remove(resource) { tracing::trace!(?resource, http_request_id, "unregister resource"); if let Some(channel) = self.tx_router.get_mut(&http_request_id) { - channel.resources.remove(resource); - if channel.resources.is_empty() { + // It's okey to do so, since we don't handle batch json rcp request anymore + // and this can be refactored after the batch request is removed in the coming version. + if channel.resources.is_empty() || matches!(resource, ResourceKey::McpRequestId(_)) + { tracing::debug!(http_request_id, "close http request wise channel"); - self.tx_router.remove(&http_request_id); + if let Some(channel) = self.tx_router.remove(&http_request_id) { + for resource in channel.resources { + self.resource_router.remove(&resource); + } + } } + } else { + tracing::warn!(http_request_id, "http request wise channel not found"); } } } From 8e8f850389d2c7c09eecb4d6ea0fef2f3e3dae15 Mon Sep 17 00:00:00 2001 From: 4t145 Date: Wed, 18 Jun 2025 19:51:43 +0800 Subject: [PATCH 2/2] fix: fix typo Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../rmcp/src/transport/streamable_http_server/session/local.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/rmcp/src/transport/streamable_http_server/session/local.rs b/crates/rmcp/src/transport/streamable_http_server/session/local.rs index 5034000c..c1c4f893 100644 --- a/crates/rmcp/src/transport/streamable_http_server/session/local.rs +++ b/crates/rmcp/src/transport/streamable_http_server/session/local.rs @@ -328,7 +328,7 @@ impl LocalSessionWorker { if let Some(http_request_id) = self.resource_router.remove(resource) { tracing::trace!(?resource, http_request_id, "unregister resource"); if let Some(channel) = self.tx_router.get_mut(&http_request_id) { - // It's okey to do so, since we don't handle batch json rcp request anymore + // It's okey to do so, since we don't handle batch json rpc request anymore // and this can be refactored after the batch request is removed in the coming version. if channel.resources.is_empty() || matches!(resource, ResourceKey::McpRequestId(_)) {