client.go | 4 ++-- torrent.go | 10 ++++++++++ diff --git a/client.go b/client.go index 6d8d7fbb6c7461b506e5fb920f52fa6fa384bcd9..5e4b5d848c5b5cecf2c626372039f81d7e6dc43b 100644 --- a/client.go +++ b/client.go @@ -2219,7 +2219,7 @@ if !cl.waitWantPeers(t) { return } cl.mu.RLock() - req.Left = uint64(t.bytesLeft()) + req.Left = t.bytesLeftAnnounce() trackers := t.Trackers cl.mu.RUnlock() if cl.announceTorrentTrackersFastStart(&req, trackers, t) { @@ -2228,7 +2228,7 @@ } newAnnounce: for cl.waitWantPeers(t) { cl.mu.RLock() - req.Left = uint64(t.bytesLeft()) + req.Left = t.bytesLeftAnnounce() trackers = t.Trackers cl.mu.RUnlock() numTrackersTried := 0 diff --git a/torrent.go b/torrent.go index 00d5ac07aeb3d98e378a92a07b86d486a2447db4..6453c50804994a4eeae997808edf420ed77f2118 100644 --- a/torrent.go +++ b/torrent.go @@ -6,6 +6,7 @@ "expvar" "fmt" "io" "log" + "math" "math/rand" "net" "sort" @@ -517,6 +518,15 @@ for i := 0; i < t.numPieces(); i++ { left += int64(t.pieceNumPendingBytes(i)) } return +} + +// Bytes left to give in tracker announces. +func (t *torrent) bytesLeftAnnounce() uint64 { + if t.haveInfo() { + return uint64(t.bytesLeft()) + } else { + return math.MaxUint64 + } } func (t *torrent) piecePartiallyDownloaded(piece int) bool {