Now it's safe to remove tracker specific bytesLeft contract
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) {
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
"fmt"
"io"
"log"
+ "math"
"math/rand"
"net"
"sort"
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 {
if t.pieceComplete(piece) {
return false