about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--btpd/policy_subr.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/btpd/policy_subr.c b/btpd/policy_subr.c
index 269d238..cd87a4e 100644
--- a/btpd/policy_subr.c
+++ b/btpd/policy_subr.c
@@ -51,10 +51,16 @@ static void
 cm_enter_endgame(struct torrent *tp)
 {
     struct peer *p;
+    struct piece *pc;
     btpd_log(BTPD_L_POL, "Entering end game\n");
     tp->endgame = 1;
+    BTPDQ_FOREACH(pc, &tp->getlst, entry) {
+	for (uint32_t i = 0; i < pc->nblocks; i++)
+	    clear_bit(pc->down_field, i);
+	pc->nbusy = 0;
+    }
     BTPDQ_FOREACH(p, &tp->peers, cm_entry) {
-	struct piece *pc;
+	assert(p->nwant == 0);
 	BTPDQ_FOREACH(pc, &tp->getlst, entry) {
 	    if (peer_has(p, pc->index)) {
 		peer_want(p, pc->index);