Author: toad
Date: 2009-01-27 19:26:33 +0000 (Tue, 27 Jan 2009)
New Revision: 25331

Modified:
   branches/db4o/freenet/src/freenet/client/async/SplitFileInserterSegment.java
Log:
Don't start the FEC job until after we have store()d, hence avoid objectCanNew 
in the case of a race condition.


Modified: 
branches/db4o/freenet/src/freenet/client/async/SplitFileInserterSegment.java
===================================================================
--- 
branches/db4o/freenet/src/freenet/client/async/SplitFileInserterSegment.java    
    2009-01-27 19:15:29 UTC (rev 25330)
+++ 
branches/db4o/freenet/src/freenet/client/async/SplitFileInserterSegment.java    
    2009-01-27 19:26:33 UTC (rev 25331)
@@ -7,6 +7,7 @@
 import freenet.client.FECCallback;
 import freenet.client.FECCodec;
 import freenet.client.FECJob;
+import freenet.client.FECQueue;
 import freenet.client.FailureCodeTracker;
 import freenet.client.InsertContext;
 import freenet.client.InsertException;
@@ -439,11 +440,13 @@
                }
                // parent.parent.notifyClients();
                started = true;
+               FECJob job = null;
+               FECCodec splitfileAlgo = null;
                if (!encoded) {
                        if (logMINOR)
                                Logger.minor(this, "Segment " + segNo + " of " 
+ parent + " ("
                                                + parent.dataLength + ") is not 
encoded");
-                       FECCodec splitfileAlgo = 
FECCodec.getCodec(this.splitfileAlgo,
+                       splitfileAlgo = FECCodec.getCodec(this.splitfileAlgo,
                                        dataBlocks.length, checkBlocks.length, 
context.mainExecutor);
                                if (logMINOR)
                                        Logger.minor(this, "Encoding segment " 
+ segNo + " of "
@@ -456,7 +459,7 @@
                                                        for(int 
i=0;i<dataBlocks.length;i++)
                                                                
container.activate(dataBlocks[i], 5);
                                                }
-                                               splitfileAlgo.addToQueue(new 
FECJob(splitfileAlgo, context.fecQueue, dataBlocks, checkBlocks, 
CHKBlock.DATA_LENGTH, blockInsertContext.persistentBucketFactory, this, false, 
parent.parent.getPriorityClass(), persistent), context.fecQueue, container);
+                                               job = new FECJob(splitfileAlgo, 
context.fecQueue, dataBlocks, checkBlocks, CHKBlock.DATA_LENGTH, 
blockInsertContext.persistentBucketFactory, this, false, 
parent.parent.getPriorityClass(), persistent);
                                        }
                                }                               
                                fin = false;
@@ -493,6 +496,9 @@
                if (finished) {
                        parent.segmentFinished(this, container, context);
                }
+               if(job != null) {
+                       splitfileAlgo.addToQueue(job, context.fecQueue, 
container);
+               }
        }
 
        public void onDecodedSegment(ObjectContainer container, ClientContext 
context, FECJob job, Bucket[] dataBuckets, Bucket[] checkBuckets, 
SplitfileBlock[] dataBlockStatus, SplitfileBlock[] checkBlockStatus) {} // 
irrevelant

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

Reply via email to