diff --git a/lib/model/folder_summary.go b/lib/model/folder_summary.go index 0c210b491..2bc193769 100644 --- a/lib/model/folder_summary.go +++ b/lib/model/folder_summary.go @@ -270,7 +270,12 @@ func (c *folderSummaryService) calculateSummaries(ctx context.Context) { case <-pump.C: t0 := time.Now() for _, folder := range c.foldersToHandle() { - c.sendSummary(folder) + select { + case <-ctx.Done(): + return + default: + } + c.sendSummary(ctx, folder) } // We don't want to spend all our time calculating summaries. Lets @@ -280,7 +285,7 @@ func (c *folderSummaryService) calculateSummaries(ctx context.Context) { pump.Reset(wait) case folder := <-c.immediate: - c.sendSummary(folder) + c.sendSummary(ctx, folder) case <-ctx.Done(): return @@ -313,7 +318,7 @@ func (c *folderSummaryService) foldersToHandle() []string { } // sendSummary send the summary events for a single folder -func (c *folderSummaryService) sendSummary(folder string) { +func (c *folderSummaryService) sendSummary(ctx context.Context, folder string) { // The folder summary contains how many bytes, files etc // are in the folder and how in sync we are. data, err := c.Summary(folder) @@ -326,6 +331,12 @@ func (c *folderSummaryService) sendSummary(folder string) { }) for _, devCfg := range c.cfg.Folders()[folder].Devices { + select { + case <-ctx.Done(): + return + default: + } + if devCfg.DeviceID.Equals(c.id) { // We already know about ourselves. continue