From: Matt Joiner Date: Sun, 21 Oct 2018 07:24:22 +0000 (+1100) Subject: Fix timer leak in tracker announces when peers are wanted X-Git-Tag: v1.0.0~34 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=02f37a34eec3d45541f9843361c063a662ba6c92;p=btrtrc.git Fix timer leak in tracker announces when peers are wanted Fixes #281. --- 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))): } } }