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();
}