about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRichard Nyberg <rnyberg@murmeldjur.se>2005-07-06 19:10:59 +0000
committerRichard Nyberg <rnyberg@murmeldjur.se>2005-07-06 19:10:59 +0000
commit617691251e5d69465388edc1375be68db5071293 (patch)
treedfecc54183c267cee44275c1cc96bdd71fe5f8c2
parent4b9aa9c042be856cacda1affd7a8d0a2b6cdfb20 (diff)
downloadbtpd-617691251e5d69465388edc1375be68db5071293.tar.gz
btpd-617691251e5d69465388edc1375be68db5071293.zip
It wasn't safe to modify the list from within the loop. Fixed it.
-rw-r--r--btpd/policy.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/btpd/policy.c b/btpd/policy.c
index 44f0d12..6050351 100644
--- a/btpd/policy.c
+++ b/btpd/policy.c
@@ -303,11 +303,13 @@ cm_on_lost_peer(struct peer *peer)
     if ((peer->flags & (PF_I_WANT|PF_P_CHOKE)) == PF_I_WANT)
 	cm_on_undownload(peer);
 
-    for (piece = BTPDQ_FIRST(&tp->getlst); piece;
-	 piece = BTPDQ_NEXT(piece, entry)) {
+    piece = BTPDQ_FIRST(&tp->getlst);
+    while (piece != NULL) {
+	struct piece *next = BTPDQ_NEXT(piece, entry);
 	if (has_bit(peer->piece_field, piece->index) &&
 	    tp->piece_count[piece->index] == 0)
 	    cm_on_peerless_piece(tp, piece);
+	piece = next;
     }
 }