Author: toad
Date: 2009-03-18 13:18:54 +0000 (Wed, 18 Mar 2009)
New Revision: 26092
Modified:
branches/db4o/freenet/src/freenet/node/fcp/ClientPutDir.java
branches/db4o/freenet/src/freenet/node/fcp/ClientRequest.java
branches/db4o/freenet/src/freenet/node/fcp/FCPClient.java
Log:
Fix the ManifestElement leaking bug ... yet another db4o misfeature workaround
Modified: branches/db4o/freenet/src/freenet/node/fcp/ClientPutDir.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/fcp/ClientPutDir.java
2009-03-18 13:18:02 UTC (rev 26091)
+++ branches/db4o/freenet/src/freenet/node/fcp/ClientPutDir.java
2009-03-18 13:18:54 UTC (rev 26092)
@@ -23,6 +23,7 @@
import freenet.client.async.ClientRequester;
import freenet.client.async.ManifestElement;
import freenet.client.async.SimpleManifestPutter;
+import freenet.client.events.ClientEvent;
import freenet.keys.FreenetURI;
import freenet.support.LogThresholdCallback;
import freenet.support.Logger;
@@ -468,4 +469,24 @@
}
super.requestWasRemoved(container, context);
}
+
+ public void receive(final ClientEvent ce, ObjectContainer container,
ClientContext context) {
+ // FIXME get rid when sure evilbug has gone away
+ container.activate(manifestElements, 2);
+ super.receive(ce, container, context);
+ }
+
+ public void storeTo(ObjectContainer container) {
+ /**
+ * After days debugging ... it turns out that db4o has severe
problems if you
+ * store() an object containing a HashMap without store()ing
the HashMap itself
+ * first!
+ */
+ boolean isStored = container.ext().isStored(this);
+ if(!isStored) {
+ if(logMINOR) Logger.minor(this, "Manifest elements:
"+manifestElements.size()+" : "+manifestElements);
+ container.store(manifestElements);
+ }
+ super.storeTo(container);
+ }
}
Modified: branches/db4o/freenet/src/freenet/node/fcp/ClientRequest.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/fcp/ClientRequest.java
2009-03-18 13:18:02 UTC (rev 26091)
+++ branches/db4o/freenet/src/freenet/node/fcp/ClientRequest.java
2009-03-18 13:18:54 UTC (rev 26092)
@@ -493,6 +493,10 @@
}
return true;
}
+
+ public void storeTo(ObjectContainer container) {
+ container.store(this);
+ }
}
Modified: branches/db4o/freenet/src/freenet/node/fcp/FCPClient.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/fcp/FCPClient.java 2009-03-18
13:18:02 UTC (rev 26091)
+++ branches/db4o/freenet/src/freenet/node/fcp/FCPClient.java 2009-03-18
13:18:54 UTC (rev 26092)
@@ -196,8 +196,8 @@
runningPersistentRequests.add(cg);
if(startLater) toStart.add(cg);
if(container != null) {
- container.store(cg);
-
container.store(runningPersistentRequests);
+ cg.storeTo(container);
+
container.ext().store(runningPersistentRequests, 2);
if(startLater) container.store(toStart);
}
}
@@ -218,6 +218,8 @@
}
synchronized(this) {
req = clientRequestsByIdentifier.get(identifier);
+// if(container != null && req != null)
+// container.activate(req, 1);
boolean removedFromRunning = false;
if(req == null) {
for(ClientRequest r : completedUnackedRequests)
{
_______________________________________________
cvs mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs