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


Reply via email to