From 5e3f9893f3e940392b70577542f6bc962a264a7b Mon Sep 17 00:00:00 2001
From: Matt Joiner <anacrolix@gmail.com>
Date: Thu, 18 Oct 2018 10:35:38 +1100
Subject: [PATCH] Always announce to trackers every interval, and announce
 earlier if short on peers

---
 tracker_scraper.go | 22 ++++++++++++----------
 1 file changed, 12 insertions(+), 10 deletions(-)

diff --git a/tracker_scraper.go b/tracker_scraper.go
index ed20a7fd..eefa92e8 100644
--- a/tracker_scraper.go
+++ b/tracker_scraper.go
@@ -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
 		}
 	}
 }
-- 
2.51.0