Author: nextgens
Date: 2006-06-17 22:41:01 +0000 (Sat, 17 Jun 2006)
New Revision: 9280

Modified:
   trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java
Log:
the missing loop on the new scheduler

Modified: trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java
===================================================================
--- trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java  
2006-06-17 22:29:03 UTC (rev 9279)
+++ trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java  
2006-06-17 22:41:01 UTC (rev 9280)
@@ -127,49 +127,55 @@

        public SendableRequest improved_scheduler_1_removeFirst() {
                // Priorities start at 0
-               // Maybe we should retry ... we were looping previously
-               Logger.minor(this, "removeFirst() (improved_1)");               
        
-               int i = random.nextInt(prioritySelecter.length);
-               SortedVectorByNumber s = priorities[prioritySelecter[i]];
-               if(s == null) {
-                       Logger.minor(this, "Priority "+prioritySelecter[i]+" is 
null");
-                       return null;
-               }
-               
-               i=prioritySelecter[i];
-               
-               SectoredRandomGrabArrayWithInt rga = 
(SectoredRandomGrabArrayWithInt) s.getFirst(); // will discard finished items
-               if(rga == null) {
-                       Logger.minor(this, "No retrycount's in priority "+i);
-                       priorities[i] = null;
-                       return null;
-               }
-               SendableRequest req = (SendableRequest) rga.removeRandom();
-               if(rga.isEmpty()) {
-                       Logger.minor(this, "Removing retrycount 
"+rga.getNumber());
-                       s.remove(rga.getNumber());
-                       if(s.isEmpty()) {
-                               Logger.minor(this, "Removing priority "+i);
+               Logger.minor(this, "removeFirst() (improved_1)");       
+               short count = 6;
+               while(count>0){
+                       int i = random.nextInt(prioritySelecter.length);
+                       SortedVectorByNumber s = 
priorities[prioritySelecter[i]];
+                       if(s == null) {
+                               Logger.minor(this, "Priority 
"+prioritySelecter[i]+" is null");
+                               count--;
+                               continue;
+                       }
+                       
+                       i=prioritySelecter[i];
+                       
+                       SectoredRandomGrabArrayWithInt rga = 
(SectoredRandomGrabArrayWithInt) s.getFirst(); // will discard finished items
+                       if(rga == null) {
+                               Logger.minor(this, "No retrycount's in priority 
"+i);
                                priorities[i] = null;
+                               count--;
+                               continue;
                        }
+                       SendableRequest req = (SendableRequest) 
rga.removeRandom();
+                       if(rga.isEmpty()) {
+                               Logger.minor(this, "Removing retrycount 
"+rga.getNumber());
+                               s.remove(rga.getNumber());
+                               if(s.isEmpty()) {
+                                       Logger.minor(this, "Removing priority 
"+i);
+                                       priorities[i] = null;
+                               }
+                       }
+                       if(req == null) {
+                               Logger.minor(this, "No requests in priority 
"+i+", retrycount "+rga.getNumber()+" ("+rga+")");
+                               count--;
+                               continue;
+                       }
+                       if(req.getPriorityClass() > i) {
+                               // Reinsert it
+                               Logger.minor(this, "In wrong priority class: 
"+req);
+                               innerRegister(req);
+                               continue;
+                       }
+                       Logger.minor(this, "removeFirst() returning "+req+" 
("+rga.getNumber()+")");
+                       ClientRequester cr = req.getClientRequest();
+                       HashSet v = (HashSet) 
allRequestsByClientRequest.get(cr);
+                       v.remove(req);
+                       if(v.isEmpty())
+                               allRequestsByClientRequest.remove(cr);
+                       return req;
                }
-               if(req == null) {
-                       Logger.minor(this, "No requests in priority "+i+", 
retrycount "+rga.getNumber()+" ("+rga+")");
-                       return null;
-               }
-               if(req.getPriorityClass() > i) {
-                       // Reinsert it
-                       Logger.minor(this, "In wrong priority class: "+req);
-                       innerRegister(req);
-                       return null;
-               }
-               Logger.minor(this, "removeFirst() returning "+req+" 
("+rga.getNumber()+")");
-               ClientRequester cr = req.getClientRequest();
-               HashSet v = (HashSet) allRequestsByClientRequest.get(cr);
-               v.remove(req);
-               if(v.isEmpty())
-                       allRequestsByClientRequest.remove(cr);
-               return req;
+               return null;
        }

        public SendableRequest default_Scheduler_removeFirst() {


Reply via email to