[freenet-cvs] r13168 - trunk/freenet/src/freenet/client
nextgens at freenetproject.org
nextgens at freenetproject.org
Tue May 8 13:18:19 UTC 2007
Author: nextgens
Date: 2007-05-08 13:18:19 +0000 (Tue, 08 May 2007)
New Revision: 13168
Modified:
trunk/freenet/src/freenet/client/ArchiveManager.java
Log:
Maybe fix a synchronization bug... maybe we should get rid of the nested locking as well
it should fix that NPE
Exception in thread "RequestStarter$SenderThread for freenet.client.async.SingleFileFetcher at ab5b79" java.lang.NullPointerException
at freenet.client.ArchiveManager.trimStoredData(ArchiveManager.java:397)
at freenet.client.ArchiveManager.addStoreElement(ArchiveManager.java:382)
at freenet.client.ArchiveManager.extractToCache(ArchiveManager.java:246)
at freenet.client.ArchiveStoreContext.extractToCache(ArchiveStoreContext.java:139)
at freenet.client.async.SingleFileFetcher$ArchiveFetcherCallback.onSuccess(SingleFileFetcher.java:466)
at freenet.client.async.SingleFileFetcher.onSuccess(SingleFileFetcher.java:224)
at freenet.client.async.SingleFileFetcher.onSuccess(SingleFileFetcher.java:134)
at freenet.client.async.ClientRequestScheduler.register(ClientRequestScheduler.java:212)
at freenet.node.SendableGet.schedule(SendableGet.java:108)
at freenet.client.async.SingleFileFetcher.handleMetadata(SingleFileFetcher.java:364)
at freenet.client.async.SingleFileFetcher.fetchArchive(SingleFileFetcher.java:450)
at freenet.client.async.SingleFileFetcher.handleMetadata(SingleFileFetcher.java:272)
at freenet.client.async.SingleFileFetcher.access$100(SingleFileFetcher.java:33)
at freenet.client.async.SingleFileFetcher$ArchiveFetcherCallback.onSuccess(SingleFileFetcher.java:473)
at freenet.client.async.SingleFileFetcher.onSuccess(SingleFileFetcher.java:224)
at freenet.client.async.SingleFileFetcher.onSuccess(SingleFileFetcher.java:134)
at freenet.client.async.ClientRequestScheduler.register(ClientRequestScheduler.java:212)
at freenet.node.SendableGet.schedule(SendableGet.java:108)
at freenet.client.async.BaseSingleFileFetcher.retry(BaseSingleFileFetcher.java:57)
at freenet.client.async.SimpleSingleFileFetcher.onFailure(SimpleSingleFileFetcher.java:92)
at freenet.client.async.SimpleSingleFileFetcher.onFailure(SimpleSingleFileFetcher.java:79)
at freenet.client.async.SimpleSingleFileFetcher.onFailure(SimpleSingleFileFetcher.java:54)
at freenet.node.SendableGet.send(SendableGet.java:95)
at freenet.node.RequestStarter$SenderThread.run(RequestStarter.java:167)
at java.lang.Thread.run(Unknown Source)
Modified: trunk/freenet/src/freenet/client/ArchiveManager.java
===================================================================
--- trunk/freenet/src/freenet/client/ArchiveManager.java 2007-05-07 23:41:17 UTC (rev 13167)
+++ trunk/freenet/src/freenet/client/ArchiveManager.java 2007-05-08 13:18:19 UTC (rev 13168)
@@ -136,10 +136,14 @@
public synchronized Bucket getCached(FreenetURI key, String filename) throws ArchiveFailureException {
if(logMINOR) Logger.minor(this, "Fetch cached: "+key+ ' ' +filename);
ArchiveKey k = new ArchiveKey(key, filename);
- ArchiveStoreItem asi = (ArchiveStoreItem) storedData.get(k);
- if(asi == null) return null;
- // Promote to top of LRU
- storedData.push(k, asi);
+ ArchiveStoreItem asi = null;
+ synchronized (storedData) {
+ asi = (ArchiveStoreItem) storedData.get(k);
+
+ if(asi == null) return null;
+ // Promote to top of LRU
+ storedData.push(k, asi);
+ }
if(logMINOR) Logger.minor(this, "Found data");
return asi.getDataOrThrow();
}
@@ -149,7 +153,9 @@
* @param item The ArchiveStoreItem to remove.
*/
synchronized void removeCachedItem(ArchiveStoreItem item) {
- storedData.removeKey(item.key);
+ synchronized (storedData) {
+ storedData.removeKey(item.key);
+ }
}
/**
@@ -369,7 +375,9 @@
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);
- storedData.push(element.key, element);
+ synchronized (storedData) {
+ storedData.push(element.key, element);
+ }
}
/**
@@ -378,8 +386,10 @@
private void 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()+" )");
- storedData.push(element.key, element);
- trimStoredData();
+ synchronized (storedData) {
+ storedData.push(element.key, element);
+ trimStoredData();
+ }
}
/**
@@ -391,7 +401,7 @@
synchronized(this) {
if(cachedData <= maxCachedData && storedData.size() <= maxCachedElements) return;
}
- ArchiveStoreItem e = (ArchiveStoreItem) storedData.popValue();
+ ArchiveStoreItem e = (ArchiveStoreItem) storedData.popValue();
if(logMINOR)
Logger.minor(this, "Dropping "+e+" : cachedData="+cachedData+" of "+maxCachedData);
e.close();
More information about the cvs
mailing list