@@ -13,7 +13,6 @@ import (
13
13
"fmt"
14
14
"iter"
15
15
"log"
16
- "maps"
17
16
"net/url"
18
17
"path/filepath"
19
18
"slices"
@@ -444,22 +443,18 @@ func fileResourceHandler(dir string) ResourceHandler {
444
443
445
444
func (s * Server ) ResourceUpdated (ctx context.Context , params * ResourceUpdatedNotificationParams ) error {
446
445
s .mu .Lock ()
447
- subscribedSessionIDs := maps .Clone (s .resourceSubscriptions [params .URI ])
448
- s .mu .Unlock ()
446
+ subscribedSessionIDs := s .resourceSubscriptions [params .URI ]
449
447
if len (subscribedSessionIDs ) == 0 {
448
+ s .mu .Unlock ()
450
449
return nil
451
450
}
452
- sessions := make ([]* ServerSession , 0 , len (subscribedSessionIDs ))
453
- for sessionID , active := range subscribedSessionIDs {
454
- if ! active {
455
- continue
456
- }
457
- for session := range s .Sessions () {
458
- if session .ID () == sessionID {
459
- sessions = append (sessions , session )
460
- }
451
+ var sessions []* ServerSession
452
+ for _ , session := range s .sessions {
453
+ if _ , ok := subscribedSessionIDs [session .ID ()]; ok {
454
+ sessions = append (sessions , session )
461
455
}
462
456
}
457
+ s .mu .Unlock ()
463
458
notifySessions (sessions , notificationResourceUpdated , params )
464
459
return nil
465
460
}
@@ -473,11 +468,10 @@ func (s *Server) subscribe(ctx context.Context, ss *ServerSession, params *Subsc
473
468
}
474
469
s .mu .Lock ()
475
470
defer s .mu .Unlock ()
476
- uri := params .URI
477
- if s .resourceSubscriptions [uri ] == nil {
478
- s .resourceSubscriptions [uri ] = make (map [string ]bool )
471
+ if s .resourceSubscriptions [params .URI ] == nil {
472
+ s .resourceSubscriptions [params .URI ] = make (map [string ]bool )
479
473
}
480
- s .resourceSubscriptions [uri ][ss .ID ()] = true
474
+ s .resourceSubscriptions [params . URI ][ss .ID ()] = true
481
475
return & emptyResult {}, nil
482
476
}
483
477
@@ -493,10 +487,13 @@ func (s *Server) unsubscribe(ctx context.Context, ss *ServerSession, params *Uns
493
487
s .mu .Lock ()
494
488
defer s .mu .Unlock ()
495
489
496
- uri := params .URI
497
- if subscribedSessionIDs , ok := s .resourceSubscriptions [uri ]; ok {
498
- subscribedSessionIDs [ss .ID ()] = false
490
+ if subscribedSessionIDs , ok := s .resourceSubscriptions [params .URI ]; ok {
491
+ delete (subscribedSessionIDs , ss .ID ())
492
+ if len (subscribedSessionIDs ) == 0 {
493
+ delete (s .resourceSubscriptions , params .URI )
494
+ }
499
495
}
496
+
500
497
return & emptyResult {}, nil
501
498
}
502
499
0 commit comments