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) {