Author: toad
Date: 2008-02-23 22:29:04 +0000 (Sat, 23 Feb 2008)
New Revision: 18145

Modified:
   trunk/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
Log:
Fix the synchronization in removeSubSegments().

Modified: trunk/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SplitFileFetcherSegment.java 
2008-02-23 22:27:26 UTC (rev 18144)
+++ trunk/freenet/src/freenet/client/async/SplitFileFetcherSegment.java 
2008-02-23 22:29:04 UTC (rev 18145)
@@ -537,11 +537,14 @@
        }

        private void removeSubSegments() {
-               for(int i=0;i<subSegments.size();i++) {
-                       SplitFileFetcherSubSegment seg = 
(SplitFileFetcherSubSegment) subSegments.get(i);
-                       seg.kill();
+               SplitFileFetcherSubSegment[] deadSegs;
+               synchronized(this) {
+                       deadSegs = (SplitFileFetcherSubSegment[]) 
subSegments.toArray(new SplitFileFetcherSubSegment[subSegments.size()]);
+                       subSegments.clear();
                }
-               subSegments.clear();
+               for(int i=0;i<deadSegs.length;i++) {
+                       deadSegs[i].kill();
+               }
        }

        public long getCooldownWakeup(int blockNum) {


Reply via email to