Author: toad
Date: 2008-11-21 19:45:17 +0000 (Fri, 21 Nov 2008)
New Revision: 23790

Modified:
   trunk/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
Log:
Doh!


Modified: trunk/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SplitFileFetcherSegment.java 
2008-11-21 19:35:04 UTC (rev 23789)
+++ trunk/freenet/src/freenet/client/async/SplitFileFetcherSegment.java 
2008-11-21 19:45:17 UTC (rev 23790)
@@ -167,6 +167,7 @@
        }
 
        public void onSuccess(Bucket data, int blockNo, 
SplitFileFetcherSubSegment seg, ClientKeyBlock block) {
+               if(data == null) throw new NullPointerException();
                boolean decodeNow = false;
                logMINOR = Logger.shouldLog(Logger.MINOR, this);
                if(logMINOR) Logger.minor(this, "Fetched block "+blockNo+" on 
"+seg);
@@ -175,8 +176,10 @@
                // No need to unregister key, because it will be cleared in 
tripPendingKey().
                boolean dontNotify;
                boolean haveDataBlocks;
+               boolean wasDataBlock = false;
                synchronized(this) {
                        if(blockNo < dataKeys.length) {
+                               wasDataBlock = true;
                                if(dataKeys[blockNo] == null) {
                                        if(!startedDecode) Logger.error(this, 
"Block already finished: "+blockNo);
                                        data.free();
@@ -205,7 +208,7 @@
                                        fetchedBlocks++;
                                // However, if we manage to get EVERY data 
block (common on a small splitfile),
                                // we don't need to FEC decode.
-                               if(blockNo < dataKeys.length)
+                               if(wasDataBlock)
                                        fetchedDataBlocks++;
                                if(logMINOR) Logger.minor(this, "Fetched 
"+fetchedBlocks+" blocks in onSuccess("+blockNo+")");
                                haveDataBlocks = fetchedDataBlocks == 
dataKeys.length;
@@ -260,6 +263,8 @@
                        for(int i=0;i<dataBuckets.length;i++) {
                                SplitfileBlock status = dataBuckets[i];
                                Bucket data = status.getData();
+                               if(data == null) 
+                                       throw new NullPointerException("Data 
bucket "+i+" of "+dataBuckets.length+" is null");
                                long copied = BucketTools.copyTo(data, os, 
Long.MAX_VALUE);
                                osSize += copied;
                                if(i != dataBuckets.length-1 && copied != 32768)

_______________________________________________
cvs mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs

Reply via email to