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