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


Reply via email to