about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRichard Nyberg <rnyberg@murmeldjur.se>2005-09-24 18:59:24 +0000
committerRichard Nyberg <rnyberg@murmeldjur.se>2005-09-24 18:59:24 +0000
commitfaad18e3681764853dd0a9e2a59d655e6c866b0f (patch)
tree20c8a9c07b483c91fdb5973038fce058aa1df31c
parentaa1fe4b2dd7dd32fa390ff10281139be5adfa2b6 (diff)
downloadbtpd-faad18e3681764853dd0a9e2a59d655e6c866b0f.tar.gz
btpd-faad18e3681764853dd0a9e2a59d655e6c866b0f.zip
In the transition to end game it's likely that we'll send an uniterest
message followed by an interest message. Optimize this but not sending
those messages in that case. This is better becasue we don't risk to
trigger a choke from the receiving peer.

-rw-r--r--btpd/peer.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/btpd/peer.c b/btpd/peer.c
index 71bcd64..e3e2d74 100644
--- a/btpd/peer.c
+++ b/btpd/peer.c
@@ -180,8 +180,13 @@ peer_want(struct peer *p, uint32_t index)
     assert(p->nwant < p->npieces);
     p->nwant++;
     if (p->nwant == 1) {
+	int unsent = 0;
+	struct nb_link *nl = BTPDQ_LAST(&p->outq, nb_tq);
+	if (nl != NULL && nl->nb->type == NB_UNINTEREST)
+	    unsent = peer_unsend(p, nl);
+	if (!unsent)
+	    peer_send(p, btpd.interest_msg);
 	p->flags |= PF_I_WANT;
-	peer_send(p, btpd.interest_msg);
     }
 }