From 3816c791930b5ea3b6dae247257a4b343731c6d8 Mon Sep 17 00:00:00 2001
From: ragnarok <ragnarok>
Date: Fri, 21 Oct 2005 00:10:13 +0000
Subject: [PATCH] Clean up some possible thread safety issues.

---
 .../java/src/org/klomp/snark/PeerCoordinator.java     | 11 ++++++-----
 apps/i2psnark/java/src/org/klomp/snark/Piece.java     |  3 ++-
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java b/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java
index 9dbe74836d..83c3329b6b 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java
@@ -511,11 +511,12 @@ public class PeerCoordinator implements PeerListener
           {
             // Unchoke some random other peer
             unchokePeer();
-            
-            // Don't count disconnected peers for the rarest-first calculations
-            for(Iterator iter = wantedPieces.iterator(); iter.hasNext(); ) {
-                Piece piece = (Piece)iter.next();
-                piece.removePeer(peer);                
+            synchronized(wantedPieces) {
+                // Don't count disconnected peers for the rarest-first calculations
+                for(Iterator iter = wantedPieces.iterator(); iter.hasNext(); ) {
+                    Piece piece = (Piece)iter.next();
+                    piece.removePeer(peer);
+                }
             }
           }
       }
diff --git a/apps/i2psnark/java/src/org/klomp/snark/Piece.java b/apps/i2psnark/java/src/org/klomp/snark/Piece.java
index c6189eb634..6e3cb2344c 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/Piece.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/Piece.java
@@ -2,6 +2,7 @@ package org.klomp.snark;
 
 import java.util.Set;
 import java.util.HashSet;
+import java.util.Collections;
 
 public class Piece implements Comparable {
 
@@ -11,7 +12,7 @@ public class Piece implements Comparable {
     
     public Piece(int id) {
         this.id = id;
-        this.peers = new HashSet();
+        this.peers = Collections.synchronizedSet(new HashSet());
         this.requested = false;
     }
     
-- 
GitLab