defer t.dropConnection(c)
c.startWriter()
cl.sendInitialMessages(c, t)
- c.updateRequestsTimer = time.AfterFunc(math.MaxInt64, func() {
- if c.needRequestUpdate != "" {
- return
- }
- if c.actualRequestState.Requests.IsEmpty() {
- panic("updateRequestsTimer should have been stopped")
- }
- c.updateRequests("updateRequestsTimer")
- })
+ c.updateRequestsTimer = time.AfterFunc(math.MaxInt64, c.updateRequestsTimerFunc)
c.updateRequestsTimer.Stop()
err := c.mainReadLoop()
if err != nil {
return nil
}
+func (c *PeerConn) updateRequestsTimerFunc() {
+ c.locker().Lock()
+ defer c.locker().Unlock()
+ if c.needRequestUpdate != "" {
+ return
+ }
+ if c.actualRequestState.Requests.IsEmpty() {
+ panic("updateRequestsTimer should have been stopped")
+ }
+ c.updateRequests("updateRequestsTimer")
+}
+
// Maximum pending requests we allow peers to send us. If peer requests are buffered on read, this
// instructs the amount of memory that might be used to cache pending writes. Assuming 512KiB
// (1<<19) cached for sending, for 16KiB (1<<14) chunks.
if preservedCount != 0 {
// TODO: Yes this is a debug log but I'm not happy with the state of the logging lib
// right now.
- log.Printf("%v requests were preserved while being choked", preservedCount)
+ log.Printf(
+ "%v requests were preserved while being choked (fast=%v)",
+ preservedCount,
+ c.fastEnabled())
torrent.Add("requestsPreservedThroughChoking", int64(preservedCount))
}
c.updateRequests("unchoked")
return true
}
if maxRequests(current.Requests.GetCardinality()) >= p.nominalMaxRequests() {
- log.Printf("not assigning all requests [desired=%v, cancelled=%v, max=%v]",
- next.Requests.GetCardinality(),
- p.cancelledRequests.GetCardinality(),
- p.nominalMaxRequests(),
- )
+ //log.Printf("not assigning all requests [desired=%v, cancelled=%v, current=%v, max=%v]",
+ // next.Requests.GetCardinality(),
+ // p.cancelledRequests.GetCardinality(),
+ // current.Requests.GetCardinality(),
+ // p.nominalMaxRequests(),
+ //)
return false
}
var err error
}
return more
})
+ p.updateRequestsTimer.Stop()
if more {
p.needRequestUpdate = ""
- if current.Requests.IsEmpty() {
- p.updateRequestsTimer.Stop()
- } else {
+ if !current.Requests.IsEmpty() {
p.updateRequestsTimer.Reset(time.Second)
}
}