tracker_scraper.go | 22 ++++++++++++---------- diff --git a/tracker_scraper.go b/tracker_scraper.go index ed20a7fdb620c74a9356a824f135710580a11003..eefa92e8d83289f68d87258f414d4691319bdede 100644 --- a/tracker_scraper.go +++ b/tracker_scraper.go @@ -132,27 +132,29 @@ } 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 } } }