diff --git a/lib/model/folder_summary.go b/lib/model/folder_summary.go index c9d229b50..58427b318 100644 --- a/lib/model/folder_summary.go +++ b/lib/model/folder_summary.go @@ -178,7 +178,11 @@ func (c *folderSummaryService) listenForUpdates(ctx context.Context) error { // This loop needs to be fast so we don't miss too many events. select { - case ev := <-sub.C(): + case ev, ok := <-sub.C(): + if !ok { + <-ctx.Done() + return ctx.Err() + } c.processUpdate(ev) case <-ctx.Done(): return ctx.Err() diff --git a/lib/syncthing/auditservice.go b/lib/syncthing/auditservice.go index c56dbaf4e..273333be0 100644 --- a/lib/syncthing/auditservice.go +++ b/lib/syncthing/auditservice.go @@ -38,7 +38,11 @@ func (s *auditService) Serve(ctx context.Context) error { for { select { - case ev := <-sub.C(): + case ev, ok := <-sub.C(): + if !ok { + <-ctx.Done() + return ctx.Err() + } enc.Encode(ev) case <-ctx.Done(): return ctx.Err() diff --git a/lib/syncthing/verboseservice.go b/lib/syncthing/verboseservice.go index 7bcb196b7..b23027df3 100644 --- a/lib/syncthing/verboseservice.go +++ b/lib/syncthing/verboseservice.go @@ -31,7 +31,11 @@ func (s *verboseService) Serve(ctx context.Context) error { defer sub.Unsubscribe() for { select { - case ev := <-sub.C(): + case ev, ok := <-sub.C(): + if !ok { + <-ctx.Done() + return ctx.Err() + } formatted := s.formatEvent(ev) if formatted != "" { l.Verboseln(formatted) diff --git a/lib/watchaggregator/aggregator.go b/lib/watchaggregator/aggregator.go index 5c176fde8..322aa502e 100644 --- a/lib/watchaggregator/aggregator.go +++ b/lib/watchaggregator/aggregator.go @@ -162,8 +162,10 @@ func (a *aggregator) mainLoop(in <-chan fs.Event, out chan<- []string, cfg confi select { case event := <-in: a.newEvent(event, inProgress) - case event := <-inProgressItemSubscription.C(): - updateInProgressSet(event, inProgress) + case event, ok := <-inProgressItemSubscription.C(): + if ok { + updateInProgressSet(event, inProgress) + } case <-a.notifyTimer.C: a.actOnTimer(out) case interval := <-a.notifyTimerResetChan: