Author: toad
Date: 2007-02-21 01:07:02 +0000 (Wed, 21 Feb 2007)
New Revision: 11868
Modified:
trunk/freenet/src/freenet/client/async/SplitFileFetcher.java
trunk/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
trunk/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
Log:
Schedule only if necessary.
Don't run any more fetches after started to complete.
Logging.
Modified: trunk/freenet/src/freenet/client/async/SplitFileFetcher.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SplitFileFetcher.java
2007-02-21 01:01:19 UTC (rev 11867)
+++ trunk/freenet/src/freenet/client/async/SplitFileFetcher.java
2007-02-21 01:07:02 UTC (rev 11868)
@@ -112,7 +112,7 @@
if(Logger.shouldLog(Logger.MINOR, this))
Logger.minor(this, "Algorithm: "+splitfileType+",
blocks per segment: "+blocksPerSegment+
", check blocks per segment:
"+checkBlocksPerSegment+", segments: "+segmentCount+
- ", data blocks:
"+splitfileDataBlocks.length+", check blocks: "+splitfileCheckBlocks);
+ ", data blocks:
"+splitfileDataBlocks.length+", check blocks: "+splitfileCheckBlocks.length);
segments = new SplitFileFetcherSegment[segmentCount]; //
initially null on all entries
if(segmentCount == 1) {
// splitfile* will be overwritten, this is bad
Modified: trunk/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
2007-02-21 01:01:19 UTC (rev 11867)
+++ trunk/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
2007-02-21 01:07:02 UTC (rev 11868)
@@ -325,8 +325,7 @@
}
// If we are here we are going to retry
SplitFileFetcherSubSegment sub = getSubSegment(tries);
- sub.add(blockNo);
- sub.schedule();
+ sub.add(blockNo, false);
}
private SplitFileFetcherSubSegment getSubSegment(int retryCount) {
@@ -375,7 +374,7 @@
try {
SplitFileFetcherSubSegment seg = getSubSegment(0);
for(int
i=0;i<dataRetries.length+checkRetries.length;i++)
- seg.add(i);
+ seg.add(i, true);
seg.schedule();
} catch (Throwable t) {
Modified: trunk/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
2007-02-21 01:01:19 UTC (rev 11867)
+++ trunk/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
2007-02-21 01:07:02 UTC (rev 11868)
@@ -203,7 +203,7 @@
}
public boolean isCancelled() {
- return segment.isFinished();
+ return segment.isFinished() || segment.isFinishing();
}
public boolean isSSK() {
@@ -211,9 +211,14 @@
return false;
}
- public synchronized void add(int blockNo) {
+ public void add(int blockNo, boolean dontSchedule) {
Integer i = new Integer(blockNo);
- blockNums.add(i);
+ synchronized(this) {
+ blockNums.add(i);
+ if(blockNums.size() > 1) return;
+ if(dontSchedule) return;
+ }
+ if(!dontSchedule) schedule();
}
public String toString() {