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