Author: toad
Date: 2009-03-26 19:28:01 +0000 (Thu, 26 Mar 2009)
New Revision: 26219

Modified:
   branches/db4o/freenet/src/freenet/node/fcp/ClientPutDir.java
   branches/db4o/freenet/src/freenet/node/fcp/PersistentPutDir.java
   branches/db4o/freenet/src/freenet/support/SimpleFieldSet.java
Log:
Fix NPE on sending PersistentPutDir by creating the SimpleFieldSet when we have 
the ObjectContainer, and then caching it for when we don't. Add 
SimpleFieldSet.removeFrom().


Modified: branches/db4o/freenet/src/freenet/node/fcp/ClientPutDir.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/fcp/ClientPutDir.java        
2009-03-26 19:26:13 UTC (rev 26218)
+++ branches/db4o/freenet/src/freenet/node/fcp/ClientPutDir.java        
2009-03-26 19:28:01 UTC (rev 26219)
@@ -367,7 +367,7 @@
                        container.activate(manifestElements, 5);
                }
                return new PersistentPutDir(identifier, publicURI, verbosity, 
priorityClass,
-                               persistenceType, global, defaultName, 
manifestElements, clientToken, started, ctx.maxInsertRetries, wasDiskPut);
+                               persistenceType, global, defaultName, 
manifestElements, clientToken, started, ctx.maxInsertRetries, wasDiskPut, 
container);
        }
 
        @Override

Modified: branches/db4o/freenet/src/freenet/node/fcp/PersistentPutDir.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/fcp/PersistentPutDir.java    
2009-03-26 19:26:13 UTC (rev 26218)
+++ branches/db4o/freenet/src/freenet/node/fcp/PersistentPutDir.java    
2009-03-26 19:28:01 UTC (rev 26219)
@@ -36,10 +36,11 @@
        final boolean started;
        final int maxRetries;
        final boolean wasDiskPut;
+       private final SimpleFieldSet cached;
        
        public PersistentPutDir(String identifier, FreenetURI uri, int 
verbosity, short priorityClass,
                short persistenceType, boolean global, String defaultName, 
HashMap<String, Object> manifestElements,
-               String token, boolean started, int maxRetries, boolean 
wasDiskPut) {
+               String token, boolean started, int maxRetries, boolean 
wasDiskPut, ObjectContainer container) {
                this.identifier = identifier;
                this.uri = uri;
                this.verbosity = verbosity;
@@ -52,10 +53,10 @@
                this.started = started;
                this.maxRetries = maxRetries;
                this.wasDiskPut = wasDiskPut;
+               cached = generateFieldSet(container);
        }
 
-       @Override
-       public SimpleFieldSet getFieldSet() {
+       private SimpleFieldSet generateFieldSet(ObjectContainer container) {
                SimpleFieldSet fs = new SimpleFieldSet(false); // false because 
this can get HUGE
                fs.putSingle("Identifier", identifier);
                fs.putSingle("URI", uri.toString(false, false));
@@ -81,6 +82,8 @@
                                subset.putSingle("TargetURI", 
tempURI.toString());
                        } else {
                                Bucket data = e.getData();
+                               if(persistenceType == 
ClientRequest.PERSIST_FOREVER)
+                                       container.activate(data, 1);
                                if(data instanceof DelayedFreeBucket) {
                                        data = 
((DelayedFreeBucket)data).getUnderlying();
                                }
@@ -99,6 +102,8 @@
                                } else {
                                        throw new IllegalStateException("Don't 
know what to do with bucket: "+data);
                                }
+                               if(persistenceType == 
ClientRequest.PERSIST_FOREVER)
+                                       container.deactivate(data, 1);
                        }
                        files.put(num, subset);
                }
@@ -112,6 +117,11 @@
        }
 
        @Override
+       public SimpleFieldSet getFieldSet() {
+               return cached;
+       }
+
+       @Override
        public String getName() {
                return name;
        }
@@ -125,6 +135,7 @@
        public void removeFrom(ObjectContainer container) {
                uri.removeFrom(container);
                removeFrom(manifestElements, container);
+               cached.removeFrom(container);
                container.delete(this);
        }
 

Modified: branches/db4o/freenet/src/freenet/support/SimpleFieldSet.java
===================================================================
--- branches/db4o/freenet/src/freenet/support/SimpleFieldSet.java       
2009-03-26 19:26:13 UTC (rev 26218)
+++ branches/db4o/freenet/src/freenet/support/SimpleFieldSet.java       
2009-03-26 19:28:01 UTC (rev 26219)
@@ -21,6 +21,8 @@
 import java.util.Iterator;
 import java.util.Map;
 
+import com.db4o.ObjectContainer;
+
 import freenet.node.FSParseException;
 import freenet.support.io.Closer;
 import freenet.support.io.LineReader;
@@ -892,4 +894,12 @@
                return s;
        }
 
+       public void removeFrom(ObjectContainer container) {
+               container.delete(values);
+               for(SimpleFieldSet fs : subsets.values())
+                       fs.removeFrom(container);
+               container.delete(subsets);
+               container.delete(this);
+       }
+
 }

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

Reply via email to