Author: toad
Date: 2006-07-26 20:19:17 +0000 (Wed, 26 Jul 2006)
New Revision: 9783

Modified:
   trunk/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
   trunk/freenet/src/freenet/node/fcp/ClientPut.java
Log:
Fix an NPE. Fix an ERROR (which may have had wider consequences) in splitfile 
fetching.

Modified: trunk/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SplitFileFetcherSegment.java 
2006-07-26 20:14:47 UTC (rev 9782)
+++ trunk/freenet/src/freenet/client/async/SplitFileFetcherSegment.java 
2006-07-26 20:19:17 UTC (rev 9783)
@@ -51,6 +51,7 @@
        private int failedBlocks;
        private int fetchedBlocks;
        private final FailureCodeTracker errors;
+       private boolean createdFetchers;

        public SplitFileFetcherSegment(short splitfileType, FreenetURI[] 
splitfileDataBlocks, FreenetURI[] splitfileCheckBlocks, SplitFileFetcher 
fetcher, ArchiveContext archiveContext, FetcherContext fetchContext, long 
maxTempLength, boolean splitUseLengths, int recursionLevel) throws 
MetadataParseException, FetchException {
                this.parentFetcher = fetcher;
@@ -327,7 +328,6 @@
                                        fail(new 
FetchException(FetchException.INVALID_METADATA, "Cannot have USKs within a 
splitfile!"));
                                dataBlockStatus[i] =
                                        (SingleFileFetcher) 
SingleFileFetcher.create(parentFetcher.parent, this, null, dataBlocks[i], 
blockFetchContext, archiveContext, blockFetchContext.maxNonSplitfileRetries, 
recursionLevel, true, new Integer(i), true, null);
-                               dataBlockStatus[i].schedule();
                        }
                        for(int i=0;i<checkBlocks.length;i++) {
                                // FIXME maybe within a non-FECced splitfile at 
least?
@@ -335,8 +335,14 @@
                                        fail(new 
FetchException(FetchException.INVALID_METADATA, "Cannot have USKs within a 
splitfile!"));
                                checkBlockStatus[i] =
                                        (SingleFileFetcher) 
SingleFileFetcher.create(parentFetcher.parent, this, null, checkBlocks[i], 
blockFetchContext, archiveContext, blockFetchContext.maxNonSplitfileRetries, 
recursionLevel, true, new Integer(dataBlocks.length+i), false, null);
+                       }
+                       synchronized(this) {
+                               createdFetchers = true;
+                       }
+                       for(int i=0;i<dataBlocks.length;i++)
+                               dataBlockStatus[i].schedule();
+                       for(int i=0;i<checkBlocks.length;i++)
                                checkBlockStatus[i].schedule();
-                       }
                } catch (MalformedURLException e) {
                        // Invalidates the whole splitfile
                        fail(new FetchException(FetchException.INVALID_URI, 
"Invalid URI in splitfile"));

Modified: trunk/freenet/src/freenet/node/fcp/ClientPut.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientPut.java   2006-07-26 20:14:47 UTC 
(rev 9782)
+++ trunk/freenet/src/freenet/node/fcp/ClientPut.java   2006-07-26 20:19:17 UTC 
(rev 9783)
@@ -182,6 +182,7 @@
        }

        protected void freeData() {
+               if(data == null) return;
                finishedSize=data.size();
                data.free();
        }


Reply via email to