]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Fix timer leak in tracker announces when peers are wanted
authorMatt Joiner <anacrolix@gmail.com>
Sun, 21 Oct 2018 07:24:22 +0000 (18:24 +1100)
committerMatt Joiner <anacrolix@gmail.com>
Sun, 21 Oct 2018 07:24:22 +0000 (18:24 +1100)
Fixes #281.

tracker_scraper.go

index a91870225a2d35092d61b75fd0132312dba59c8c..2e177badea2b9c904471895249bf6280dac5896b 100644 (file)
@@ -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))):
                }
        }
 }