Avoid triggering writer cond where possible
This commit is contained in:
parent
361cdc0e08
commit
110764480e
|
@ -1035,14 +1035,6 @@ func (cl *Client) sendInitialMessages(conn *connection, torrent *Torrent) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cl *Client) connDeleteRequest(t *Torrent, cn *connection, r request) bool {
|
|
||||||
if !cn.RequestPending(r) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
delete(cn.requests, r)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
// Process incoming ut_metadata message.
|
// Process incoming ut_metadata message.
|
||||||
func (cl *Client) gotMetadataExtensionMsg(payload []byte, t *Torrent, c *connection) error {
|
func (cl *Client) gotMetadataExtensionMsg(payload []byte, t *Torrent, c *connection) error {
|
||||||
var d map[string]int
|
var d map[string]int
|
||||||
|
|
|
@ -239,11 +239,6 @@ func (cn *connection) Post(msg pp.Message) {
|
||||||
cn.writerCond.Broadcast()
|
cn.writerCond.Broadcast()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cn *connection) RequestPending(r request) bool {
|
|
||||||
_, ok := cn.requests[r]
|
|
||||||
return ok
|
|
||||||
}
|
|
||||||
|
|
||||||
func (cn *connection) requestMetadataPiece(index int) {
|
func (cn *connection) requestMetadataPiece(index int) {
|
||||||
eID := cn.PeerExtensionIDs["ut_metadata"]
|
eID := cn.PeerExtensionIDs["ut_metadata"]
|
||||||
if eID == 0 {
|
if eID == 0 {
|
||||||
|
@ -528,8 +523,9 @@ func undirtiedChunks(piece int, t *Torrent, f func(chunkSpec) bool) bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cn *connection) stopRequestingPiece(piece int) {
|
func (cn *connection) stopRequestingPiece(piece int) {
|
||||||
cn.pieceRequestOrder.Remove(piece)
|
if cn.pieceRequestOrder.Remove(piece) {
|
||||||
cn.writerCond.Broadcast()
|
cn.writerCond.Broadcast()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// This is distinct from Torrent piece priority, which is the user's
|
// This is distinct from Torrent piece priority, which is the user's
|
||||||
|
@ -556,8 +552,9 @@ func (cn *connection) updatePiecePriority(piece int) {
|
||||||
panic(tpp)
|
panic(tpp)
|
||||||
}
|
}
|
||||||
prio += piece / 3
|
prio += piece / 3
|
||||||
cn.pieceRequestOrder.Set(piece, prio)
|
if cn.pieceRequestOrder.Set(piece, prio) {
|
||||||
cn.updateRequests()
|
cn.updateRequests()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cn *connection) getPieceInclination() []int {
|
func (cn *connection) getPieceInclination() []int {
|
||||||
|
@ -752,8 +749,7 @@ func (c *connection) mainReadLoop() error {
|
||||||
// We can then reset our interest.
|
// We can then reset our interest.
|
||||||
c.updateRequests()
|
c.updateRequests()
|
||||||
case pp.Reject:
|
case pp.Reject:
|
||||||
cl.connDeleteRequest(t, c, newRequest(msg.Index, msg.Begin, msg.Length))
|
c.deleteRequest(newRequest(msg.Index, msg.Begin, msg.Length))
|
||||||
c.updateRequests()
|
|
||||||
case pp.Unchoke:
|
case pp.Unchoke:
|
||||||
c.PeerChoked = false
|
c.PeerChoked = false
|
||||||
c.writerCond.Broadcast()
|
c.writerCond.Broadcast()
|
||||||
|
@ -954,9 +950,7 @@ func (c *connection) receiveChunk(msg *pp.Message) {
|
||||||
req := newRequest(msg.Index, msg.Begin, pp.Integer(len(msg.Piece)))
|
req := newRequest(msg.Index, msg.Begin, pp.Integer(len(msg.Piece)))
|
||||||
|
|
||||||
// Request has been satisfied.
|
// Request has been satisfied.
|
||||||
if cl.connDeleteRequest(t, c, req) {
|
if !c.deleteRequest(req) {
|
||||||
defer c.updateRequests()
|
|
||||||
} else {
|
|
||||||
unexpectedChunksReceived.Add(1)
|
unexpectedChunksReceived.Add(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1092,3 +1086,12 @@ func (c *connection) peerHasWantedPieces() bool {
|
||||||
func (c *connection) numLocalRequests() int {
|
func (c *connection) numLocalRequests() int {
|
||||||
return len(c.requests)
|
return len(c.requests)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *connection) deleteRequest(r request) bool {
|
||||||
|
if _, ok := c.requests[r]; !ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
delete(c.requests, r)
|
||||||
|
c.writerCond.Broadcast()
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue