Author: toad
Date: 2008-07-21 19:37:06 +0000 (Mon, 21 Jul 2008)
New Revision: 21296

Modified:
   branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
Log:
Optimise slightly, make sure we don't add a job if we don't need to.

Modified: 
branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java  
2008-07-21 19:24:06 UTC (rev 21295)
+++ branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java  
2008-07-21 19:37:06 UTC (rev 21296)
@@ -929,7 +929,8 @@
        /**
         * Map from SendableGet implementing SupportsBulkCallFailure to 
BulkCallFailureItem[].
         */
-       private transient HashMap bulkFailureLookup = new HashMap();
+       private transient HashMap bulkFailureLookupItems = new HashMap();
+       private transient HashMap bulkFailureLookupJob = new HashMap();

        private class BulkCaller implements DBJob {

@@ -942,8 +943,9 @@
                public void run(ObjectContainer container, ClientContext 
context) {
                        BulkCallFailureItem[] items;
                        synchronized(ClientRequestScheduler.this) {
-                               items = (BulkCallFailureItem[]) 
bulkFailureLookup.get(getter);
-                               bulkFailureLookup.remove(getter);
+                               items = (BulkCallFailureItem[]) 
bulkFailureLookupItems.get(getter);
+                               bulkFailureLookupItems.remove(getter);
+                               bulkFailureLookupJob.remove(getter);
                        }
                        if(items != null && items.length > 0) {
                                if(logMINOR) Logger.minor(this, "Calling 
non-fatal failure in bulk for "+items.length+" items");
@@ -970,18 +972,27 @@
                if(get instanceof SupportsBulkCallFailure) {
                        SupportsBulkCallFailure getter = 
(SupportsBulkCallFailure) get;
                        BulkCallFailureItem item = new BulkCallFailureItem(e, 
keyNum, (PersistentChosenRequest) req);
+                       BulkCaller caller = null;
                        synchronized(this) {
-                               BulkCallFailureItem[] items = 
(BulkCallFailureItem[]) bulkFailureLookup.get(get);
+                               BulkCallFailureItem[] items = 
(BulkCallFailureItem[]) bulkFailureLookupItems.get(get);
                                if(items == null) {
-                                       bulkFailureLookup.put(getter, new 
BulkCallFailureItem[] { item } );
+                                       bulkFailureLookupItems.put(getter, new 
BulkCallFailureItem[] { item } );
                                } else {
                                        BulkCallFailureItem[] newItems = new 
BulkCallFailureItem[items.length+1];
                                        System.arraycopy(items, 0, newItems, 0, 
items.length);
                                        newItems[items.length] = item;
-                                       bulkFailureLookup.put(getter, newItems);
+                                       bulkFailureLookupItems.put(getter, 
newItems);
                                }
+                               caller = (BulkCaller) 
bulkFailureLookupJob.get(getter);
+                               if(caller == null) {
+                                       caller = new BulkCaller(getter);
+                                       bulkFailureLookupJob.put(getter, 
caller);
+                               } else
+                                       caller = null;
+                               
                        }
-                       jobRunner.queue(new BulkCaller(getter), prio, true);
+                       if(caller != null)
+                               jobRunner.queue(caller, prio, true);
                        return;
                }
                jobRunner.queue(new DBJob() {


Reply via email to