lib: Fix panic due to closed event subscriptions on shutdown (#8079)
This commit is contained in:
@@ -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()
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user