Author: toad Date: 2008-06-20 00:39:30 +0000 (Fri, 20 Jun 2008) New Revision: 20512
Modified: branches/db4o/freenet/src/freenet/client/InsertBlock.java branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java branches/db4o/freenet/src/freenet/client/async/SingleFileInserter.java Log: Fix SingleFileInserter likewise (mostly SplitHandler, SFI itself doesn't have much that is changeable). Modified: branches/db4o/freenet/src/freenet/client/InsertBlock.java =================================================================== --- branches/db4o/freenet/src/freenet/client/InsertBlock.java 2008-06-20 00:17:52 UTC (rev 20511) +++ branches/db4o/freenet/src/freenet/client/InsertBlock.java 2008-06-20 00:39:30 UTC (rev 20512) @@ -3,6 +3,8 @@ * http://www.gnu.org/ for further details of the GPL. */ package freenet.client; +import com.db4o.ObjectContainer; + import freenet.keys.FreenetURI; import freenet.support.api.Bucket; @@ -31,11 +33,15 @@ return (isFreed ? null : data); } - public void free(){ + public void free(ObjectContainer container){ synchronized (this) { if(isFreed) return; isFreed = true; } data.free(); + if(container != null) { + data.removeFrom(container); + container.delete(this); + } } } Modified: branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java =================================================================== --- branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java 2008-06-20 00:17:52 UTC (rev 20511) +++ branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java 2008-06-20 00:39:30 UTC (rev 20512) @@ -312,7 +312,10 @@ } else { Logger.error(this, "Could not find client grabber for client "+req.getClient()+" from "+chosenTracker); } - innerRegister(req, random); + if(req.persistent()) + innerRegister(req, random); + else + schedTransient.innerRegister(req, random); continue; // Try the next one on this retry count. } // Check recentSuccesses Modified: branches/db4o/freenet/src/freenet/client/async/SingleFileInserter.java =================================================================== --- branches/db4o/freenet/src/freenet/client/async/SingleFileInserter.java 2008-06-20 00:17:52 UTC (rev 20511) +++ branches/db4o/freenet/src/freenet/client/async/SingleFileInserter.java 2008-06-20 00:39:30 UTC (rev 20512) @@ -378,6 +378,8 @@ sfi = newSFI; metadataPutter = newMetaPutter; } + if(parent.persistent()) + container.set(this); } public SplitHandler() { @@ -389,6 +391,8 @@ sfi = newState; if(oldState == metadataPutter) metadataPutter = newState; + if(parent.persistent()) + container.set(this); } public void onSuccess(ClientPutState state, ObjectContainer container, ClientContext context) { @@ -397,8 +401,11 @@ boolean lateStart = false; synchronized(this) { if(finished){ - if(freeData) - block.free(); + if(freeData) { + block.free(container); + if(parent.persistent()) + container.set(this); + } return; } if(state == sfi) { @@ -420,6 +427,8 @@ finished = true; } } + if(parent.persistent()) + container.set(this); if(lateStart) startMetadata(container, context); else if(finished) @@ -430,7 +439,7 @@ synchronized(this) { if(finished){ if(freeData) - block.free(); + block.free(container); return; } } @@ -459,6 +468,8 @@ } } if(reportMetadataOnly) { + if(parent.persistent()) + container.set(this); cb.onMetadata(meta, this, container, context); return; } @@ -512,6 +523,8 @@ metadataPutter = new SingleFileInserter(parent, this, newBlock, true, ctx, false, getCHKOnly, false, token, false, true, metaPutterTargetFilename, earlyEncode); // If EarlyEncode, then start the metadata insert ASAP, to get the key. // Otherwise, wait until the data is fetchable (to improve persistence). + if(parent.persistent()) + container.set(this); if(!(earlyEncode || splitInsertSuccess)) return; } if(logMINOR) Logger.minor(this, "Putting metadata on "+metadataPutter+" from "+sfi+" ("+((SplitFileInserter)sfi).getLength()+ ')'); @@ -525,13 +538,15 @@ synchronized(this) { if(finished){ if(freeData) - block.free(); + block.free(container); return; } finished = true; oldSFI = sfi; oldMetadataPutter = metadataPutter; } + if(parent.persistent()) + container.set(this); if(oldSFI != null) oldSFI.cancel(container, context); if(oldMetadataPutter != null) @@ -558,13 +573,15 @@ oldSFI = sfi; oldMetadataPutter = metadataPutter; } + if(parent.persistent()) + container.set(this); if(oldSFI != null) oldSFI.cancel(container, context); if(oldMetadataPutter != null) oldMetadataPutter.cancel(container, context); if(freeData) - block.free(); + block.free(container); } public void onBlockSetFinished(ClientPutState state, ObjectContainer container, ClientContext context) { @@ -573,6 +590,8 @@ splitInsertSetBlocks = true; else if (state == metadataPutter) metaInsertSetBlocks = true; + if(parent.persistent()) + container.set(this); if(!(splitInsertSetBlocks && metaInsertSetBlocks)) return; } @@ -620,12 +639,17 @@ if(logMINOR) Logger.minor(this, "Metadata fetchable"+(metaFetchable?"":" already")); if(metaFetchable) return; metaFetchable = true; + if(parent.persistent()) + container.set(this); } else { if(state != sfi) { Logger.error(this, "onFetchable for unknown state "+state); return; } + if(dataFetchable) return; dataFetchable = true; + if(parent.persistent()) + container.set(this); if(logMINOR) Logger.minor(this, "Data fetchable"); if(metaInsertStarted) return; } @@ -648,6 +672,8 @@ metaInsertStarted = true; splitInserter = sfi; } + if(parent.persistent()) + container.set(this); if(putter != null) { if(logMINOR) Logger.minor(this, "Starting metadata inserter: "+putter+" for "+this); putter.schedule(container, context); @@ -671,7 +697,7 @@ public void cancel(ObjectContainer container, ClientContext context) { if(freeData) - block.free(); + block.free(container); } public void schedule(ObjectContainer container, ClientContext context) throws InsertException {
