From bb3ae90cd25724078e74c9f5fd477a17578d4649 Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Wed, 15 Apr 2020 13:05:41 +1000 Subject: [PATCH] Comments and reduced locking in trackerScraper.Run --- tracker_scraper.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/tracker_scraper.go b/tracker_scraper.go index 3d73c255..9d0cc9e9 100644 --- a/tracker_scraper.go +++ b/tracker_scraper.go @@ -142,24 +142,33 @@ func (me *trackerScraper) Run() { me.t.cl.unlock() wait: + // Make sure we don't announce for at least a minute since the last one. interval := ar.Interval if interval < time.Minute { interval = time.Minute } - wantPeers := me.t.wantPeersEvent.LockedChan(me.t.cl.locker()) + + me.t.cl.lock() + wantPeers := me.t.wantPeersEvent.C() + closed := me.t.closed.C() + me.t.cl.unlock() + + // If we want peers, reduce the interval to the minimum. select { case <-wantPeers: if interval > time.Minute { interval = time.Minute } + // Now we're at the minimum, don't trigger on it anymore. wantPeers = nil default: } select { - case <-me.t.closed.LockedChan(me.t.cl.locker()): + case <-closed: return case <-wantPeers: + // Recalculate the interval. goto wait case <-time.After(time.Until(ar.Completed.Add(interval))): } -- 2.50.0