lib: Fix panic due to closed event subscriptions on shutdown (#8079)

This commit is contained in:
Gahl Saraf
2021-12-22 20:16:21 +01:00
committed by GitHub
parent bf7f82f7b2
commit cc39341eb9
4 changed files with 19 additions and 5 deletions
+5 -1
View File
@@ -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. // This loop needs to be fast so we don't miss too many events.
select { select {
case ev := <-sub.C(): case ev, ok := <-sub.C():
if !ok {
<-ctx.Done()
return ctx.Err()
}
c.processUpdate(ev) c.processUpdate(ev)
case <-ctx.Done(): case <-ctx.Done():
return ctx.Err() return ctx.Err()
+5 -1
View File
@@ -38,7 +38,11 @@ func (s *auditService) Serve(ctx context.Context) error {
for { for {
select { select {
case ev := <-sub.C(): case ev, ok := <-sub.C():
if !ok {
<-ctx.Done()
return ctx.Err()
}
enc.Encode(ev) enc.Encode(ev)
case <-ctx.Done(): case <-ctx.Done():
return ctx.Err() return ctx.Err()
+5 -1
View File
@@ -31,7 +31,11 @@ func (s *verboseService) Serve(ctx context.Context) error {
defer sub.Unsubscribe() defer sub.Unsubscribe()
for { for {
select { select {
case ev := <-sub.C(): case ev, ok := <-sub.C():
if !ok {
<-ctx.Done()
return ctx.Err()
}
formatted := s.formatEvent(ev) formatted := s.formatEvent(ev)
if formatted != "" { if formatted != "" {
l.Verboseln(formatted) l.Verboseln(formatted)
+4 -2
View File
@@ -162,8 +162,10 @@ func (a *aggregator) mainLoop(in <-chan fs.Event, out chan<- []string, cfg confi
select { select {
case event := <-in: case event := <-in:
a.newEvent(event, inProgress) a.newEvent(event, inProgress)
case event := <-inProgressItemSubscription.C(): case event, ok := <-inProgressItemSubscription.C():
updateInProgressSet(event, inProgress) if ok {
updateInProgressSet(event, inProgress)
}
case <-a.notifyTimer.C: case <-a.notifyTimer.C:
a.actOnTimer(out) a.actOnTimer(out)
case interval := <-a.notifyTimerResetChan: case interval := <-a.notifyTimerResetChan: