Author: toad
Date: 2007-03-16 22:22:04 +0000 (Fri, 16 Mar 2007)
New Revision: 12160
Modified:
trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java
Log:
Move reregistration out of the synchronized block
Modified: trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java
===================================================================
--- trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java
2007-03-16 22:08:53 UTC (rev 12159)
+++ trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java
2007-03-16 22:22:04 UTC (rev 12160)
@@ -349,19 +349,20 @@
}
public void reregisterAll(ClientRequester request) {
+ SendableRequest[] reqs;
synchronized(this) {
HashSet h = (HashSet)
allRequestsByClientRequest.get(request);
- if(h != null) {
- Iterator i = h.iterator();
- while(i.hasNext()) {
- SendableRequest req = (SendableRequest)
i.next();
- // Don't actually remove it as removing
it is a rather slow operation
- // It will be removed when
removeFirst() reaches it.
- //grabArray.remove(req);
- innerRegister(req);
- }
- }
+ if(h == null) return;
+ reqs = (SendableRequest[]) h.toArray(new
SendableRequest[h.size()]);
}
+
+ for(int i=0;i<reqs.length;i++) {
+ SendableRequest req = reqs[i];
+ // Don't actually remove it as removing it is a rather
slow operation
+ // It will be removed when removeFirst() reaches it.
+ //grabArray.remove(req);
+ innerRegister(req);
+ }
synchronized(starter) {
starter.notifyAll();
}