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;
}