Author: toad
Date: 2008-06-26 22:35:18 +0000 (Thu, 26 Jun 2008)
New Revision: 20794

Modified:
   
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerBase.java
Log:
Fix occasional "No HashSet registered" on non-persistent requests caused by 
race condition with request selection.

Modified: 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerBase.java
===================================================================
--- 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerBase.java  
    2008-06-26 22:29:19 UTC (rev 20793)
+++ 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerBase.java  
    2008-06-26 22:35:18 UTC (rev 20794)
@@ -241,7 +241,6 @@
                int retryCount = req.getRetryCount();
                short prio = req.getPriorityClass(container);
                if(logMINOR) Logger.minor(this, "Still registering "+req+" at 
prio "+prio+" retry "+retryCount+" for "+req.getClientRequest());
-               addToGrabArray(prio, retryCount, fixRetryCount(retryCount), 
req.getClient(), req.getClientRequest(), req, random, container);
                Set v = (Set) 
allRequestsByClientRequest.get(req.getClientRequest());
                if(v == null) {
                        v = makeSetForAllRequestsByClientRequest(container);
@@ -252,6 +251,7 @@
                v.add(req);
                if(persistent())
                        container.set(v);
+               addToGrabArray(prio, retryCount, fixRetryCount(retryCount), 
req.getClient(), req.getClientRequest(), req, random, container);
                if(logMINOR) Logger.minor(this, "Registered "+req+" on 
prioclass="+prio+", retrycount="+retryCount+" v.size()="+v.size());
        }

@@ -332,6 +332,7 @@
        }

        protected void removeFromAllRequestsByClientRequest(SendableRequest 
req, ClientRequester cr) {
+               
                        Set v = (Set) allRequestsByClientRequest.get(cr);
                        if(v == null) {
                                Logger.error(this, "No HashSet registered for 
"+cr+" for "+req);


Reply via email to