Author: toad
Date: 2008-05-21 13:47:25 +0000 (Wed, 21 May 2008)
New Revision: 20015

Modified:
   branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
   
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerBase.java
Log:
Lock only on ClientRequestScheduler (and some internal objects)

Modified: 
branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java  
2008-05-21 13:44:18 UTC (rev 20014)
+++ branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java  
2008-05-21 13:47:25 UTC (rev 20015)
@@ -252,7 +252,7 @@

        public void reregisterAll(ClientRequester request) {
 //             if(request.persistent())
-                       schedCore.reregisterAll(request, random);
+                       schedCore.reregisterAll(request, random, this);
 //             else
 //                     schedTransient.reregisterAll(request, random);
 //             starter.wakeUp();
@@ -262,7 +262,7 @@
                return choosenPriorityScheduler;
        }

-       public void succeeded(BaseSendableGet succeeded) {
+       public synchronized void succeeded(BaseSendableGet succeeded) {
                if(succeeded.persistent())
                        schedCore.succeeded(succeeded);
                else

Modified: 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerBase.java
===================================================================
--- 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerBase.java  
    2008-05-21 13:44:18 UTC (rev 20014)
+++ 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerBase.java  
    2008-05-21 13:47:25 UTC (rev 20015)
@@ -221,7 +221,7 @@
                else return 0;
        }

-       synchronized void innerRegister(SendableRequest req, RandomSource 
random) {
+       void innerRegister(SendableRequest req, RandomSource random) {
                if(logMINOR) Logger.minor(this, "Still registering "+req+" at 
prio "+req.getPriorityClass()+" retry "+req.getRetryCount()+" for 
"+req.getClientRequest());
                int retryCount = req.getRetryCount();
                addToGrabArray(req.getPriorityClass(), retryCount, 
fixRetryCount(retryCount), req.getClient(), req.getClientRequest(), req, 
random);
@@ -234,7 +234,7 @@
                if(logMINOR) Logger.minor(this, "Registered "+req+" on 
prioclass="+req.getPriorityClass()+", retrycount="+req.getRetryCount()+" 
v.size()="+v.size());
        }

-       synchronized void addToGrabArray(short priorityClass, int retryCount, 
int rc, Object client, ClientRequester cr, SendableRequest req, RandomSource 
random) {
+       void addToGrabArray(short priorityClass, int retryCount, int rc, Object 
client, ClientRequester cr, SendableRequest req, RandomSource random) {
                if((priorityClass > RequestStarter.MINIMUM_PRIORITY_CLASS) || 
(priorityClass < RequestStarter.MAXIMUM_PRIORITY_CLASS))
                        throw new IllegalStateException("Invalid priority: 
"+priorityClass+" - range is "+RequestStarter.MAXIMUM_PRIORITY_CLASS+" (most 
important) to "+RequestStarter.MINIMUM_PRIORITY_CLASS+" (least important)");
                // Priority
@@ -277,9 +277,9 @@
                return Math.max(0, retryCount-MIN_RETRY_COUNT);
        }

-       public void reregisterAll(ClientRequester request, RandomSource random) 
{
+       public void reregisterAll(ClientRequester request, RandomSource random, 
ClientRequestScheduler lock) {
                SendableRequest[] reqs;
-               synchronized(this) {
+               synchronized(lock) {
                        HashSet h = (HashSet) 
allRequestsByClientRequest.get(request);
                        if(h == null) return;
                        reqs = (SendableRequest[]) h.toArray(new 
SendableRequest[h.size()]);
@@ -296,17 +296,14 @@

        public void succeeded(BaseSendableGet succeeded) {
                if(isInsertScheduler) return;
-               synchronized(this) {
                        if(logMINOR)
                                Logger.minor(this, "Recording successful fetch 
from "+succeeded);
                        recentSuccesses.add(succeeded);
                        while(recentSuccesses.size() > 8)
                                recentSuccesses.remove(0);
-               }
        }

        protected void removeFromAllRequestsByClientRequest(SendableRequest 
req, ClientRequester cr) {
-               synchronized(this) {
                        HashSet v = (HashSet) 
allRequestsByClientRequest.get(cr);
                        if(v == null) {
                                Logger.error(this, "No HashSet registered for 
"+cr);
@@ -316,7 +313,6 @@
                                        allRequestsByClientRequest.remove(cr);
                                if(logMINOR) Logger.minor(this, (removed ? "" : 
"Not ") + "Removed from HashSet for "+cr+" which now has "+v.size()+" 
elements");
                        }
-               }
        }

 }


Reply via email to