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


Reply via email to