From 02f37a34eec3d45541f9843361c063a662ba6c92 Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Sun, 21 Oct 2018 18:24:22 +1100 Subject: [PATCH] Fix timer leak in tracker announces when peers are wanted Fixes #281. --- tracker_scraper.go | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/tracker_scraper.go b/tracker_scraper.go index a9187022..2e177bad 100644 --- a/tracker_scraper.go +++ b/tracker_scraper.go @@ -138,12 +138,17 @@ func (me *trackerScraper) Run() { me.t.cl.unlock() wait: - interval := time.Until(ar.Completed.Add(ar.Interval)) + interval := ar.Interval + if interval < time.Minute { + interval = time.Minute + } + wantPeers := me.t.wantPeersEvent.LockedChan(me.t.cl.locker()) select { - case <-me.t.wantPeersEvent.LockedChan(me.t.cl.locker()): + case <-wantPeers: if interval > time.Minute { interval = time.Minute } + wantPeers = nil default: } @@ -152,9 +157,9 @@ func (me *trackerScraper) Run() { return case <-me.stop.LockedChan(me.t.cl.locker()): return - case <-time.After(interval): - case <-me.t.wantPeersEvent.LockedChan(me.t.cl.locker()): + case <-wantPeers: goto wait + case <-time.After(time.Until(ar.Completed.Add(interval))): } } } -- 2.48.1