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

Reply via email to