Author: toad
Date: 2008-03-29 12:59:15 +0000 (Sat, 29 Mar 2008)
New Revision: 18822

Modified:
   trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java
Log:
If a request is in the wrong priority class, remove it before reregistering it.
Prevents an infinite loop in the request starter when we e.g. demote all the 
requests which haven't been tried 3 times yet.

Modified: trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java
===================================================================
--- trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java  
2008-03-29 12:46:05 UTC (rev 18821)
+++ trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java  
2008-03-29 12:59:15 UTC (rev 18822)
@@ -426,6 +426,18 @@
                                        // Reinsert it : shouldn't happen if we 
are calling reregisterAll,
                                        // maybe we should ask people to report 
that error if seen
                                        Logger.normal(this, "In wrong priority 
class: "+req+" (req.prio="+req.getPriorityClass()+" but 
chosen="+choosenPriorityClass+ ')');
+                                       // Remove it.
+                                       SectoredRandomGrabArrayWithObject 
clientGrabber = (SectoredRandomGrabArrayWithObject) 
rga.getGrabber(req.getClient());
+                                       if(clientGrabber != null) {
+                                               RandomGrabArray baseRGA = 
(RandomGrabArray) clientGrabber.getGrabber(req.getClientRequest());
+                                               if(baseRGA != null) {
+                                                       baseRGA.remove(req);
+                                               } else {
+                                                       Logger.error(this, 
"Could not find base RGA for requestor "+req.getClientRequest()+" from 
"+clientGrabber);
+                                               }
+                                       } else {
+                                               Logger.error(this, "Could not 
find client grabber for client "+req.getClient()+" from "+rga);
+                                       }
                                        innerRegister(req);
                                        continue;
                                }


Reply via email to