Author: toad
Date: 2009-01-27 14:50:31 +0000 (Tue, 27 Jan 2009)
New Revision: 25314

Modified:
   branches/db4o/freenet/src/freenet/client/async/SplitFileInserter.java
   branches/db4o/freenet/src/freenet/client/async/SplitFileInserterSegment.java
Log:
Fix NPE: referring to variables on the SplitFileInserter inside its constructor


Modified: branches/db4o/freenet/src/freenet/client/async/SplitFileInserter.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SplitFileInserter.java       
2009-01-27 14:48:45 UTC (rev 25313)
+++ branches/db4o/freenet/src/freenet/client/async/SplitFileInserter.java       
2009-01-27 14:50:31 UTC (rev 25314)
@@ -129,7 +129,7 @@
                }
                
                // Create segments
-               segments = splitIntoSegments(segmentSize, dataBuckets, 
context.mainExecutor, container, context);
+               segments = splitIntoSegments(segmentSize, dataBuckets, 
context.mainExecutor, container, context, persistent, put);
                if(persistent) {
                        // Deactivate all buckets, and let dataBuckets be GC'ed
                        for(int i=0;i<dataBuckets.length;i++) {
@@ -242,7 +242,7 @@
                        SimpleFieldSet segment = segFS.subset(index);
                        segFS.removeSubset(index);
                        if(segment == null) throw new ResumeException("No 
segment "+i);
-                       segments[i] = new SplitFileInserterSegment(this, 
segment, splitfileAlgorithm, ctx, getCHKOnly, i, context, container);
+                       segments[i] = new SplitFileInserterSegment(this, 
persistent, parent, segment, splitfileAlgorithm, ctx, getCHKOnly, i, context, 
container);
                        dataBlocks += segments[i].countDataBlocks();
                        checkBlocks += segments[i].countCheckBlocks();
                }
@@ -254,7 +254,7 @@
        /**
         * Group the blocks into segments.
         */
-       private SplitFileInserterSegment[] splitIntoSegments(int segmentSize, 
Bucket[] origDataBlocks, Executor executor, ObjectContainer container, 
ClientContext context) {
+       private SplitFileInserterSegment[] splitIntoSegments(int segmentSize, 
Bucket[] origDataBlocks, Executor executor, ObjectContainer container, 
ClientContext context, boolean persistent, BaseClientPutter putter) {
                int dataBlocks = origDataBlocks.length;
 
                Vector segs = new Vector();
@@ -262,7 +262,7 @@
                // First split the data up
                if((dataBlocks < segmentSize) || (segmentSize == -1)) {
                        // Single segment
-                       SplitFileInserterSegment onlySeg = new 
SplitFileInserterSegment(this, splitfileAlgorithm, 
FECCodec.getCheckBlocks(splitfileAlgorithm, origDataBlocks.length), 
origDataBlocks, ctx, getCHKOnly, 0, container);
+                       SplitFileInserterSegment onlySeg = new 
SplitFileInserterSegment(this, persistent, putter, splitfileAlgorithm, 
FECCodec.getCheckBlocks(splitfileAlgorithm, origDataBlocks.length), 
origDataBlocks, ctx, getCHKOnly, 0, container);
                        segs.add(onlySeg);
                } else {
                        int j = 0;
@@ -274,7 +274,7 @@
                                j = i;
                                for(int x=0;x<seg.length;x++)
                                        if(seg[x] == null) throw new 
NullPointerException("In splitIntoSegs: "+x+" is null of "+seg.length+" of 
"+segNo);
-                               SplitFileInserterSegment s = new 
SplitFileInserterSegment(this, splitfileAlgorithm, 
FECCodec.getCheckBlocks(splitfileAlgorithm, seg.length), seg, ctx, getCHKOnly, 
segNo, container);
+                               SplitFileInserterSegment s = new 
SplitFileInserterSegment(this, persistent, putter, splitfileAlgorithm, 
FECCodec.getCheckBlocks(splitfileAlgorithm, seg.length), seg, ctx, getCHKOnly, 
segNo, container);
                                segs.add(s);
                                
                                if(i == dataBlocks) break;

Modified: 
branches/db4o/freenet/src/freenet/client/async/SplitFileInserterSegment.java
===================================================================
--- 
branches/db4o/freenet/src/freenet/client/async/SplitFileInserterSegment.java    
    2009-01-27 14:48:45 UTC (rev 25313)
+++ 
branches/db4o/freenet/src/freenet/client/async/SplitFileInserterSegment.java    
    2009-01-27 14:50:31 UTC (rev 25314)
@@ -78,14 +78,14 @@
                return hashCode;
        }
 
-       public SplitFileInserterSegment(SplitFileInserter parent,
+       public SplitFileInserterSegment(SplitFileInserter parent, boolean 
persistent, BaseClientPutter putter,
                        short splitfileAlgo, int checkBlockCount, Bucket[] 
origDataBlocks,
                        InsertContext blockInsertContext, boolean getCHKOnly, 
int segNo, ObjectContainer container) {
                logMINOR = Logger.shouldLog(Logger.MINOR, this);
                hashCode = super.hashCode();
                this.parent = parent;
                this.getCHKOnly = getCHKOnly;
-               this.persistent = parent.persistent;
+               this.persistent = persistent;
                this.errors = new FailureCodeTracker(true);
                this.blockInsertContext = blockInsertContext;
                this.splitfileAlgo = splitfileAlgo;
@@ -95,8 +95,8 @@
                dataURIs = new ClientCHK[origDataBlocks.length];
                dataBlockInserters = new SingleBlockInserter[dataBlocks.length];
                checkBlockInserters = new 
SingleBlockInserter[checkBlocks.length];
-               parent.parent.addBlocks(dataURIs.length + checkURIs.length, 
container);
-               parent.parent.addMustSucceedBlocks(dataURIs.length + 
checkURIs.length, container);
+               putter.addBlocks(dataURIs.length + checkURIs.length, container);
+               putter.addMustSucceedBlocks(dataURIs.length + checkURIs.length, 
container);
                this.segNo = segNo;
        }
 
@@ -105,14 +105,14 @@
         * 
         * @throws ResumeException
         */
-       public SplitFileInserterSegment(SplitFileInserter parent,
+       public SplitFileInserterSegment(SplitFileInserter parent, boolean 
persistent, BaseClientPutter putter,
                        SimpleFieldSet fs, short splitfileAlgorithm, 
InsertContext ctx,
                        boolean getCHKOnly, int segNo, ClientContext context, 
ObjectContainer container) throws ResumeException {
                hashCode = super.hashCode();
                this.parent = parent;
                this.splitfileAlgo = splitfileAlgorithm;
                this.getCHKOnly = getCHKOnly;
-               this.persistent = parent.persistent;
+               this.persistent = persistent;
                this.blockInsertContext = ctx;
                this.segNo = segNo;
                if (!"SplitFileInserterSegment".equals(fs.get("Type")))
@@ -323,8 +323,8 @@
                                        throw new ResumeException("Missing data 
block " + i
                                                        + " and need to 
reconstruct check blocks");
                }
-               parent.parent.addBlocks(dataURIs.length + checkURIs.length, 
container);
-               parent.parent.addMustSucceedBlocks(dataURIs.length + 
checkURIs.length, container);
+               putter.addBlocks(dataURIs.length + checkURIs.length, container);
+               putter.addMustSucceedBlocks(dataURIs.length + checkURIs.length, 
container);
        }
 
        public synchronized SimpleFieldSet getProgressFieldset() {

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

Reply via email to