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