]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Always announce to trackers every interval, and announce earlier if short on peers
authorMatt Joiner <anacrolix@gmail.com>
Wed, 17 Oct 2018 23:35:38 +0000 (10:35 +1100)
committerMatt Joiner <anacrolix@gmail.com>
Wed, 17 Oct 2018 23:35:38 +0000 (10:35 +1100)
tracker_scraper.go

index ed20a7fdb620c74a9356a824f135710580a11003..eefa92e8d83289f68d87258f414d4691319bdede 100644 (file)
@@ -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
                }
        }
 }