Author: toad
Date: 2008-11-27 01:32:24 +0000 (Thu, 27 Nov 2008)
New Revision: 23897

Modified:
   trunk/freenet/src/freenet/support/io/TempBucketFactory.java
Log:
Fix more ConcurrentModificationException's when fetching freesites.


Modified: trunk/freenet/src/freenet/support/io/TempBucketFactory.java
===================================================================
--- trunk/freenet/src/freenet/support/io/TempBucketFactory.java 2008-11-27 
01:07:53 UTC (rev 23896)
+++ trunk/freenet/src/freenet/support/io/TempBucketFactory.java 2008-11-27 
01:32:24 UTC (rev 23897)
@@ -7,7 +7,9 @@
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.lang.ref.WeakReference;
+import java.util.Iterator;
 import java.util.LinkedList;
+import java.util.ListIterator;
 import java.util.Queue;
 import java.util.Random;
 import java.util.Vector;
@@ -89,16 +91,23 @@
                }
                
                private synchronized void closeInputStreams(boolean forFree) {
-                       for(TempBucketInputStream is : tbis) {
-                               try {
-                                       if(forFree)
-                                               is.close();
-                                       else
-                                               is._maybeResetInputStream();
-                               } catch(IOException e) {
-                                       Closer.close(is);
-                                       tbis.remove(is);
-                               }
+                       for(ListIterator<TempBucketInputStream> i = 
tbis.listIterator(); i.hasNext();) {
+                               TempBucketInputStream is = i.next();
+                                       if(forFree) {
+                                               i.remove();
+                                               try {
+                                                       is.close();
+                                               } catch (IOException e) {
+                                                       Logger.error(this, 
"Caught "+e+" closing "+is);
+                                               }
+                                       } else {
+                                               try {
+                                                       
is._maybeResetInputStream();
+                                               } catch(IOException e) {
+                                                       i.remove();
+                                                       Closer.close(is);
+                                               }
+                                       }
                        }
                }
                

_______________________________________________
cvs mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs

Reply via email to