Author: toad
Date: 2006-10-06 13:12:10 +0000 (Fri, 06 Oct 2006)
New Revision: 10629
Modified:
trunk/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
Log:
Debugging NPE... (transmute it to something else)
Modified: trunk/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
2006-10-06 06:40:06 UTC (rev 10628)
+++ trunk/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
2006-10-06 13:12:10 UTC (rev 10629)
@@ -92,6 +92,10 @@
this.recursionLevel = 0;
}
if(logMINOR) Logger.minor(this, "Created "+this+" for
"+parentFetcher);
+ for(int i=0;i<dataBlocks.length;i++)
+ if(dataBlocks[i] == null) throw new
NullPointerException("Null: data block "+i);
+ for(int i=0;i<checkBlocks.length;i++)
+ if(checkBlocks[i] == null) throw new
NullPointerException("Null: data block "+i);
}
public synchronized boolean isFinished() {
@@ -362,26 +366,41 @@
public void schedule() {
try {
for(int i=0;i<dataBlocks.length;i++) {
+ if(dataBlocks[i] == null) {
+ // Already fetched?
+ continue;
+ }
// FIXME maybe within a non-FECced splitfile at
least?
if(dataBlocks[i].getKeyType().equals("USK"))
fail(new
FetchException(FetchException.INVALID_METADATA, "Cannot have USKs within a
splitfile!"));
- dataBlockStatus[i] =
+ if(dataBlockStatus[i] != null) {
+ Logger.error(this, "Scheduling twice?
dataBlockStatus["+i+"] = "+dataBlockStatus[i]);
+ } else dataBlockStatus[i] =
(SingleFileFetcher)
SingleFileFetcher.create(parentFetcher.parent, this, null, dataBlocks[i],
blockFetchContext, archiveContext, blockFetchContext.maxNonSplitfileRetries,
recursionLevel, true, new Integer(i), true, null);
}
for(int i=0;i<checkBlocks.length;i++) {
+ if(checkBlocks[i] == null) {
+ // Already fetched?
+ continue;
+ }
// FIXME maybe within a non-FECced splitfile at
least?
if(checkBlocks[i].getKeyType().equals("USK"))
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);
+ if(checkBlockStatus[i] != null) {
+ Logger.error(this, "Scheduling twice?
dataBlockStatus["+i+"] = "+dataBlockStatus[i]);
+ } else checkBlockStatus[i] =
+ (SingleFileFetcher)
SingleFileFetcher.create(parentFetcher.parent, this, null, dataBlocks[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<dataBlocks.length;i++) {
+ if(dataBlockStatus[i] != null)
+ dataBlockStatus[i].schedule();
+ }
for(int i=0;i<checkBlocks.length;i++)
- checkBlockStatus[i].schedule();
+ if(checkBlockStatus[i] != null)
+ checkBlockStatus[i].schedule();
} catch (MalformedURLException e) {
// Invalidates the whole splitfile
fail(new FetchException(FetchException.INVALID_URI,
"Invalid URI in splitfile"));