From fc860df5147601d976c87d629bf84184d83a27ce Mon Sep 17 00:00:00 2001 From: Jakob Borg Date: Thu, 13 Dec 2018 08:11:51 +0100 Subject: [PATCH] lib/watchaggregator: Properly unsubscribe from events when stopping (ref #5372) (#5374) --- lib/watchaggregator/aggregator.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/watchaggregator/aggregator.go b/lib/watchaggregator/aggregator.go index 4b4ee041..b57c8c20 100644 --- a/lib/watchaggregator/aggregator.go +++ b/lib/watchaggregator/aggregator.go @@ -136,10 +136,13 @@ func (a *aggregator) mainLoop(in <-chan fs.Event, out chan<- []string, cfg *conf a.notifyTimer = time.NewTimer(a.notifyDelay) defer a.notifyTimer.Stop() - inProgress := make(map[string]struct{}) inProgressItemSubscription := events.Default.Subscribe(events.ItemStarted | events.ItemFinished) + defer events.Default.Unsubscribe(inProgressItemSubscription) cfg.Subscribe(a) + defer cfg.Unsubscribe(a) + + inProgress := make(map[string]struct{}) for { select { @@ -154,7 +157,6 @@ func (a *aggregator) mainLoop(in <-chan fs.Event, out chan<- []string, cfg *conf case folderCfg := <-a.folderCfgUpdate: a.updateConfig(folderCfg) case <-a.ctx.Done(): - cfg.Unsubscribe(a) l.Debugln(a, "Stopped") return }