Author: toad
Date: 2008-07-01 16:31:28 +0000 (Tue, 01 Jul 2008)
New Revision: 20916

Modified:
   
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerBase.java
   
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java
Log:
Recognise when a selected request is not in pendingKeys for the key and 
complain.

Modified: 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerBase.java
===================================================================
--- 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerBase.java  
    2008-07-01 16:03:12 UTC (rev 20915)
+++ 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerBase.java  
    2008-07-01 16:31:28 UTC (rev 20916)
@@ -224,6 +224,23 @@
                }
        }

+       protected boolean inPendingKeys(SendableRequest req, Key key) {
+               Object o;
+               synchronized(pendingKeys) {
+                       o = pendingKeys.get(key);
+               }
+               if(o == null) {
+                       return false;
+               } else if(o instanceof SendableGet) {
+                       return o == req;
+               } else {
+                       SendableGet[] gets = (SendableGet[]) o;
+                       for(int i=0;i<gets.length;i++)
+                               if(gets[i] == req) return true;
+               }
+               return false;
+       }
+
        public long countQueuedRequests() {
                if(pendingKeys != null)
                        return pendingKeys.size();

Modified: 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java
===================================================================
--- 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java  
    2008-07-01 16:03:12 UTC (rev 20915)
+++ 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java  
    2008-07-01 16:31:28 UTC (rev 20916)
@@ -267,6 +267,9 @@
                                container.set(ret);
                                if(logMINOR)
                                        Logger.minor(this, "Storing "+ret);
+                               if((req instanceof SendableGet) && 
inPendingKeys(req, key)) {
+                                       Logger.error(this, "Selected key not in 
pendingKeys: key "+key+" for "+req);
+                               }
                        } else {
                                ret = new ChosenRequest(req, token, key, ckey, 
req.getPriorityClass(container));
                        }


Reply via email to