Author: toad
Date: 2009-03-07 21:17:27 +0000 (Sat, 07 Mar 2009)
New Revision: 25955

Modified:
   branches/db4o/freenet/src/freenet/client/InsertBlock.java
   branches/db4o/freenet/src/freenet/client/async/SingleFileInserter.java
Log:
Don't clone here, we can just pass it on


Modified: branches/db4o/freenet/src/freenet/client/InsertBlock.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/InsertBlock.java   2009-03-07 
21:05:53 UTC (rev 25954)
+++ branches/db4o/freenet/src/freenet/client/InsertBlock.java   2009-03-07 
21:17:27 UTC (rev 25955)
@@ -67,10 +67,15 @@
        }
 
        /** Null out the data so it doesn't get removed in removeFrom().
-        * Call this when the data becomes somebody else's problem. You should 
clone()
-        * the desiredURI and clientMetadata, since these are always removed. */
+        * Call this when the data becomes somebody else's problem. */
        public void nullData() {
                data = null;
        }
+
+       /** Null out the URI so it doesn't get removed in removeFrom().
+        * Call this when the URI becomes somebody else's problem. */
+       public void nullURI() {
+               this.desiredURI = null;
+       }
        
 }

Modified: branches/db4o/freenet/src/freenet/client/async/SingleFileInserter.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SingleFileInserter.java      
2009-03-07 21:05:53 UTC (rev 25954)
+++ branches/db4o/freenet/src/freenet/client/async/SingleFileInserter.java      
2009-03-07 21:17:27 UTC (rev 25955)
@@ -196,6 +196,7 @@
                int blockSize;
                int oneBlockCompressedSize;
                
+               boolean isCHK = false;
                String type = block.desiredURI.getKeyType();
                if(type.equals("SSK") || type.equals("KSK") || 
type.equals("USK")) {
                        blockSize = SSKBlock.DATA_LENGTH;
@@ -203,6 +204,7 @@
                } else if(type.equals("CHK")) {
                        blockSize = CHKBlock.DATA_LENGTH;
                        oneBlockCompressedSize = 
CHKBlock.MAX_COMPRESSED_DATA_LENGTH;
+                       isCHK = true;
                } else {
                        throw new InsertException(InsertException.INVALID_URI, 
"Unknown key type: "+type, null);
                }
@@ -236,11 +238,11 @@
                                        data = fixNotPersistent(data, context);
                                // Just insert it
                                ClientPutState bi =
-                                       createInserter(parent, data, 
codecNumber, block.desiredURI, ctx, cb, metadata, (int)block.getData().size(), 
-1, getCHKOnly, true, container, context, freeData);
+                                       createInserter(parent, data, 
codecNumber, ctx, cb, metadata, (int)block.getData().size(), -1, getCHKOnly, 
true, container, context, freeData);
                                if(logMINOR)
                                        Logger.minor(this, "Inserting without 
metadata: "+bi+" for "+this);
                                cb.onTransition(this, bi, container);
-                               if(earlyEncode && bi instanceof 
SingleBlockInserter && block.desiredURI.isCHK())
+                               if(earlyEncode && bi instanceof 
SingleBlockInserter && isCHK)
                                        
((SingleBlockInserter)bi).getBlock(container, context, true);
                                bi.schedule(container, context);
                                cb.onBlockSetFinished(this, container, context);
@@ -288,13 +290,13 @@
                                        Logger.error(this, "Caught "+e, e);
                                        throw new 
InsertException(InsertException.INTERNAL_ERROR, "Got 
MetadataUnresolvedException in SingleFileInserter: "+e.toString(), null);
                                }
-                               ClientPutState metaPutter = 
createInserter(parent, metadataBucket, (short) -1, persistent ? 
block.desiredURI.clone() : block.desiredURI, ctx, mcb, true, (int)origSize, -1, 
getCHKOnly, true, container, context, true);
+                               ClientPutState metaPutter = 
createInserter(parent, metadataBucket, (short) -1, ctx, mcb, true, 
(int)origSize, -1, getCHKOnly, true, container, context, true);
                                if(logMINOR)
                                        Logger.minor(this, "Inserting metadata: 
"+metaPutter+" for "+this);
                                mcb.addURIGenerator(metaPutter, container);
                                mcb.add(dataPutter, container);
                                cb.onTransition(this, mcb, container);
-                               if(earlyEncode && metaPutter instanceof 
SingleBlockInserter && block.desiredURI.isCHK())
+                               if(earlyEncode && metaPutter instanceof 
SingleBlockInserter && isCHK)
                                        
((SingleBlockInserter)metaPutter).getBlock(container, context, true);
                                Logger.minor(this, ""+mcb+" : data 
"+dataPutter+" meta "+metaPutter);
                                mcb.arm(container, context);
@@ -433,10 +435,11 @@
                return meta;
        }
 
-       private ClientPutState createInserter(BaseClientPutter parent, Bucket 
data, short compressionCodec, FreenetURI uri, 
+       private ClientPutState createInserter(BaseClientPutter parent, Bucket 
data, short compressionCodec, 
                        InsertContext ctx, PutCompletionCallback cb, boolean 
isMetadata, int sourceLength, int token, boolean getCHKOnly, 
                        boolean addToParent, ObjectContainer container, 
ClientContext context, boolean freeData) throws InsertException {
                
+               FreenetURI uri = block.desiredURI;
                uri.checkInsertURI(); // will throw an exception if needed
                
                if(uri.getKeyType().equals("USK")) {
@@ -448,8 +451,10 @@
                        }
                } else {
                        SingleBlockInserter sbi = 
-                               new SingleBlockInserter(parent, data, 
compressionCodec, persistent ? uri.clone() : uri, ctx, cb, isMetadata, 
sourceLength, token, 
+                               new SingleBlockInserter(parent, data, 
compressionCodec, uri, ctx, cb, isMetadata, sourceLength, token, 
                                                getCHKOnly, addToParent, false, 
this.token, container, context, persistent, freeData);
+                       // pass uri to SBI
+                       block.nullURI();
                        return sbi;
                }
                

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

Reply via email to