]> Sergey Matveev's repositories - btrtrc.git/blobdiff - peerconn.go
Update webseeds for peer requesting
[btrtrc.git] / peerconn.go
index 48453f2bc571ba4431d2e92eb2fae0d5c1acb3d9..a9d0baad2696e0fc5e0161b2a9dc723bc162dcea 100644 (file)
@@ -243,7 +243,7 @@ func (cn *Peer) peerHasAllPieces() (all bool, known bool) {
        return roaring.Flip(&cn._peerPieces, 0, bitmap.BitRange(cn.t.numPieces())).IsEmpty(), true
 }
 
-func (cn *PeerConn) locker() *lockWithDeferreds {
+func (cn *Peer) locker() *lockWithDeferreds {
        return cn.t.cl.locker()
 }
 
@@ -403,6 +403,9 @@ func (p *Peer) close() {
        if !p.closed.Set() {
                return
        }
+       if p.updateRequestsTimer != nil {
+               p.updateRequestsTimer.Stop()
+       }
        p.peerImpl.onClose()
        if p.t != nil {
                p.t.decPeerPieceAvailability(p)
@@ -416,9 +419,6 @@ func (cn *PeerConn) onClose() {
        if cn.pex.IsEnabled() {
                cn.pex.Close()
        }
-       if cn.updateRequestsTimer != nil {
-               cn.updateRequestsTimer.Stop()
-       }
        cn.tickleWriter()
        if cn.conn != nil {
                cn.conn.Close()
@@ -638,7 +638,7 @@ func (me *PeerConn) _cancel(r RequestIndex) bool {
 }
 
 func (cn *PeerConn) fillWriteBuffer() {
-       if !cn.applyNextRequestState() {
+       if !cn.maybeUpdateActualRequestState() {
                return
        }
        if cn.pex.IsEnabled() {
@@ -674,11 +674,17 @@ func (cn *PeerConn) postBitfield() {
        cn.sentHaves = bitmap.Bitmap{cn.t._completedPieces.Clone()}
 }
 
-func (cn *PeerConn) updateRequests(reason string) {
+// Sets a reason to update requests, and if there wasn't already one, handle it.
+func (cn *Peer) updateRequests(reason string) {
        if cn.needRequestUpdate != "" {
                return
        }
        cn.needRequestUpdate = reason
+       cn.handleUpdateRequests()
+}
+
+func (cn *PeerConn) handleUpdateRequests() {
+       // The writer determines the request state as needed when it can write.
        cn.tickleWriter()
 }