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