Author: toad
Date: 2006-11-08 21:33:15 +0000 (Wed, 08 Nov 2006)
New Revision: 10838

Modified:
   trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java
Log:
Fix infinite loop

Modified: trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java
===================================================================
--- trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java  
2006-11-08 20:27:23 UTC (rev 10837)
+++ trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java  
2006-11-08 21:33:15 UTC (rev 10838)
@@ -240,7 +240,7 @@
                return Math.max(0, retryCount-MIN_RETRY_COUNT);
        }

-       private SortedVectorByNumber removeFirstAccordingToPriorities(int 
priority){
+       private int removeFirstAccordingToPriorities(int priority){
                SortedVectorByNumber result = null;

                short fuzz = -1, iteration = 0;
@@ -259,7 +259,7 @@
                        result = priorities[priority];
                        if((result != null) && !result.isEmpty()) {
                                if(logMINOR) Logger.minor(this, "using priority 
: "+priority);
-                               return result;
+                               return priority;
                        }

                        if(logMINOR) Logger.debug(this, "Priority "+priority+" 
is null (fuzz = "+fuzz+")");
@@ -267,14 +267,16 @@
                }

                //FIXME: implement NONE
-               return null;
+               return -1;
        }

        public SendableRequest removeFirst() {
                // Priorities start at 0
                if(logMINOR) Logger.minor(this, "removeFirst()");
                int choosenPriorityClass = Integer.MAX_VALUE;
-               SortedVectorByNumber s = 
removeFirstAccordingToPriorities(choosenPriorityClass);
+               choosenPriorityClass = 
removeFirstAccordingToPriorities(choosenPriorityClass);
+               if(choosenPriorityClass == -1) return null;
+               SortedVectorByNumber s = priorities[choosenPriorityClass];
                if(s != null){
                        while(true) {
                                SectoredRandomGrabArrayWithInt rga = 
(SectoredRandomGrabArrayWithInt) s.getFirst();
@@ -296,7 +298,7 @@
                                } else if(req.getPriorityClass() != 
choosenPriorityClass) {
                                        // Reinsert it : shouldn't happen if we 
are calling reregisterAll,
                                        // maybe we should ask people to report 
that error if seen
-                                       if(logMINOR) Logger.minor(this, "In 
wrong priority class: "+req);
+                                       if(logMINOR) Logger.minor(this, "In 
wrong priority class: "+req+" (req.prio="+req.getPriorityClass()+" but 
chosen="+choosenPriorityClass+")");
                                        innerRegister(req);
                                        continue;
                                }


Reply via email to