@@ -356,29 +356,27 @@ pub struct StreamableHttpMessageReceiver {
356356
357357impl LocalSessionWorker {
358358 fn unregister_resource ( & mut self , resource : & ResourceKey ) {
359- if let Some ( http_request_id) = self . resource_router . remove ( resource) {
360- tracing:: trace!( ?resource, http_request_id, "unregister resource" ) ;
361- if let Some ( channel) = self . tx_router . get_mut ( & http_request_id) {
362- // It's okey to do so, since we don't handle batch json rpc request anymore
363- // and this can be refactored after the batch request is removed in the coming version.
364- if channel. resources . is_empty ( ) || matches ! ( resource, ResourceKey :: McpRequestId ( _) )
365- {
366- tracing:: debug!( http_request_id, "close http request wise channel" ) ;
367- if let Some ( channel) = self . tx_router . get_mut ( & http_request_id) {
368- for resource in channel. resources . drain ( ) {
369- self . resource_router . remove ( & resource) ;
370- }
371- channel. completed_at = Some ( Instant :: now ( ) ) ;
372- // Close the sender so the client's SSE stream ends,
373- // but keep the entry so the cache is available for
374- // late resume requests.
375- let ( closed_tx, _) = tokio:: sync:: mpsc:: channel ( 1 ) ;
376- channel. tx . tx = closed_tx;
377- }
378- }
379- } else {
380- tracing:: warn!( http_request_id, "http request wise channel not found" ) ;
381- }
359+ let Some ( http_request_id) = self . resource_router . remove ( resource) else {
360+ return ;
361+ } ;
362+ tracing:: trace!( ?resource, http_request_id, "unregister resource" ) ;
363+ let Some ( channel) = self . tx_router . get_mut ( & http_request_id) else {
364+ tracing:: warn!( http_request_id, "http request wise channel not found" ) ;
365+ return ;
366+ } ;
367+ if !channel. resources . is_empty ( ) && !matches ! ( resource, ResourceKey :: McpRequestId ( _) ) {
368+ return ;
369+ }
370+ tracing:: debug!( http_request_id, "close http request wise channel" ) ;
371+ let resources: Vec < _ > = channel. resources . drain ( ) . collect ( ) ;
372+ channel. completed_at = Some ( Instant :: now ( ) ) ;
373+ // Close the sender so the client's SSE stream ends,
374+ // but keep the entry so the cache is available for
375+ // late resume requests.
376+ let ( closed_tx, _) = tokio:: sync:: mpsc:: channel ( 1 ) ;
377+ channel. tx . tx = closed_tx;
378+ for resource in resources {
379+ self . resource_router . remove ( & resource) ;
382380 }
383381 }
384382 fn register_resource ( & mut self , resource : ResourceKey , http_request_id : HttpRequestId ) {
0 commit comments