From 5e3f9893f3e940392b70577542f6bc962a264a7b Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Thu, 18 Oct 2018 10:35:38 +1100 Subject: [PATCH] Always announce to trackers every interval, and announce earlier if short on peers --- tracker_scraper.go | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/tracker_scraper.go b/tracker_scraper.go index ed20a7fd..eefa92e8 100644 --- a/tracker_scraper.go +++ b/tracker_scraper.go @@ -132,27 +132,29 @@ func (me *trackerScraper) announce() (ret trackerAnnounceResult) { func (me *trackerScraper) Run() { for { - select { - case <-me.t.closed.LockedChan(me.t.cl.locker()): - return - case <-me.stop.LockedChan(me.t.cl.locker()): - return - case <-me.t.wantPeersEvent.LockedChan(me.t.cl.locker()): - } - ar := me.announce() me.t.cl.lock() me.lastAnnounce = ar me.t.cl.unlock() - intervalChan := time.After(time.Until(ar.Completed.Add(ar.Interval))) + wait: + interval := time.Until(ar.Completed.Add(ar.Interval)) + select { + case <-me.t.wantPeersEvent.LockedChan(me.t.cl.locker()): + if interval > time.Minute { + interval = time.Minute + } + default: + } select { case <-me.t.closed.LockedChan(me.t.cl.locker()): return case <-me.stop.LockedChan(me.t.cl.locker()): return - case <-intervalChan: + case <-time.After(interval): + case <-me.t.wantPeersEvent.LockedChan(me.t.cl.locker()): + goto wait } } } -- 2.50.0