Author: nextgens
Date: 2008-05-05 13:41:57 +0000 (Mon, 05 May 2008)
New Revision: 19764
Modified:
trunk/freenet/src/freenet/node/fcp/FCPServer.java
trunk/freenet/src/freenet/support/io/PersistentTempBucketFactory.java
Log:
optimize the PersistentTempBucketFactory code
Modified: trunk/freenet/src/freenet/node/fcp/FCPServer.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/FCPServer.java 2008-05-05 13:13:27 UTC
(rev 19763)
+++ trunk/freenet/src/freenet/node/fcp/FCPServer.java 2008-05-05 13:41:57 UTC
(rev 19764)
@@ -49,6 +49,7 @@
import freenet.support.api.StringCallback;
import freenet.support.io.Closer;
import freenet.support.io.FileUtil;
+import java.util.LinkedList;
/**
* FCP server process.
@@ -613,7 +614,7 @@
if(logMINOR) Logger.minor(this, "Storing persistent requests");
ClientRequest[] persistentRequests = getPersistentRequests();
if(logMINOR) Logger.minor(this, "Persistent requests count:
"+persistentRequests.length);
- Bucket[] toFree = null;
+ LinkedList toFree = null;
try {
synchronized(persistenceSync) {
toFree =
core.persistentTempBucketFactory.grabBucketsToFree();
@@ -654,17 +655,22 @@
if(logMINOR) Logger.minor(this, "Stored persistent
requests");
} finally {
if(toFree != null) {
- if(logMINOR) Logger.minor(this, "We are about
to free "+toFree.length+" persistent buckets");
- for(int i=0;i<toFree.length;i++) {
+ long freedBuckets = 0;
+ Iterator it = toFree.iterator();
+ while(it.hasNext()) {
+ Bucket current = (Bucket) it.next();
try {
- toFree[i].free();
- } catch (Throwable t) {
+ current.free();
+ freedBuckets++;
+ } catch(Throwable t) {
try {
-
System.err.println("Caught "+t+" trying to free bucket "+toFree[i]);
+
System.err.println("Caught " + t + " trying to free bucket " + current);
t.printStackTrace();
- } catch (Throwable t1) { /*
ignore */ }
+ } catch(Throwable t1) { /*
ignore */ }
}
}
+ if(logMINOR)
+ Logger.minor(this, "We have freed
"+freedBuckets+" persistent buckets");
}
}
}
Modified: trunk/freenet/src/freenet/support/io/PersistentTempBucketFactory.java
===================================================================
--- trunk/freenet/src/freenet/support/io/PersistentTempBucketFactory.java
2008-05-05 13:13:27 UTC (rev 19763)
+++ trunk/freenet/src/freenet/support/io/PersistentTempBucketFactory.java
2008-05-05 13:41:57 UTC (rev 19764)
@@ -38,7 +38,7 @@
private final Random rand;
/** Buckets to free */
- private final LinkedList bucketsToFree;
+ private LinkedList bucketsToFree;
public PersistentTempBucketFactory(File dir, String prefix, Random
rand) throws IOException {
boolean logMINOR = Logger.shouldLog(Logger.MINOR, this);
@@ -119,16 +119,14 @@
*/
public void delayedFreeBucket(Bucket b) {
synchronized(this) {
- if(Logger.shouldLog(Logger.MINOR, this))
- Logger.minor(this, "Adding "+b+" to the
bucketsToFree list ("+bucketsToFree.size()+')');
bucketsToFree.add(b);
}
}
- public Bucket[] grabBucketsToFree() {
+ public LinkedList grabBucketsToFree() {
synchronized(this) {
- Bucket[] toFree = (Bucket[]) bucketsToFree.toArray(new
Bucket[bucketsToFree.size()]);
- bucketsToFree.clear();
+ LinkedList toFree = bucketsToFree;
+ bucketsToFree = new LinkedList();
return toFree;
}
}