Author: toad
Date: 2007-06-30 15:39:07 +0000 (Sat, 30 Jun 2007)
New Revision: 13849

Modified:
   trunk/freenet/src/freenet/client/ArchiveManager.java
Log:
We were leaking RealArchiveStoreItem's. This would eventually cause continual 
internal errors etc when accessing archives.

Modified: trunk/freenet/src/freenet/client/ArchiveManager.java
===================================================================
--- trunk/freenet/src/freenet/client/ArchiveManager.java        2007-06-30 
14:05:32 UTC (rev 13848)
+++ trunk/freenet/src/freenet/client/ArchiveManager.java        2007-06-30 
15:39:07 UTC (rev 13849)
@@ -391,9 +391,13 @@
        private void addErrorElement(ArchiveStoreContext ctx, FreenetURI key, 
String name, String error) {
                ErrorArchiveStoreItem element = new ErrorArchiveStoreItem(ctx, 
key, name, error);
                if(logMINOR) Logger.minor(this, "Adding error element: 
"+element+" for "+key+ ' ' +name);
+               ArchiveStoreItem oldItem;
                synchronized (storedData) {
+                       oldItem = (ArchiveStoreItem) 
storedData.get(element.key);
                        storedData.push(element.key, element);  
                }
+               if(oldItem != null)
+                       oldItem.close();
        }

        /**
@@ -402,9 +406,13 @@
        private ArchiveStoreItem addStoreElement(ArchiveStoreContext ctx, 
FreenetURI key, String name, TempStoreElement temp) {
                RealArchiveStoreItem element = new RealArchiveStoreItem(this, 
ctx, key, name, temp);
                if(logMINOR) Logger.minor(this, "Adding store element: 
"+element+" ( "+key+ ' ' +name+" size "+element.spaceUsed()+" )");
+               ArchiveStoreItem oldItem;
                synchronized (storedData) {
+                       oldItem = (ArchiveStoreItem) 
storedData.get(element.key);
                        storedData.push(element.key, element);
                }
+               if(oldItem != null)
+                       oldItem.close();
                trimStoredData();
                return element;
        }


Reply via email to