Author: toad
Date: 2008-07-01 10:59:34 +0000 (Tue, 01 Jul 2008)
New Revision: 20897

Modified:
   branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
   branches/db4o/freenet/src/freenet/support/RandomGrabArray.java
Log:
Only reschedule on coming out of cooldown if not already scheduled.
If appear to be scheduled, check with the RGA whether we really are, complain 
if not.

Modified: 
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java 
2008-07-01 10:41:01 UTC (rev 20896)
+++ branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java 
2008-07-01 10:59:34 UTC (rev 20897)
@@ -30,6 +30,7 @@
 import freenet.keys.NodeCHK;
 import freenet.node.RequestScheduler;
 import freenet.support.Logger;
+import freenet.support.RandomGrabArray;
 import freenet.support.api.Bucket;
 import freenet.support.io.BucketTools;

@@ -807,7 +808,20 @@
                if(v != null) {
                        for(int i=0;i<v.size();i++) {
                                if(v.get(i) == segment) foundCaller = true;
-                               ((SplitFileFetcherSubSegment) 
v.get(i)).schedule(container, context, true);
+                               SplitFileFetcherSubSegment sub = 
(SplitFileFetcherSubSegment) v.get(i);
+                               RandomGrabArray rga = sub.getParentGrabArray();
+                               if(sub.getParentGrabArray() == null) {
+                                       sub.schedule(container, context, true);
+                               } else {
+//                                     if(logMINOR) {
+                                               container.activate(rga, 1);
+                                               if(!rga.contains(sub, 
container)) {
+                                                       Logger.error(this, 
"Sub-segment has RGA but isn't registered to it!!: "+sub+" for "+rga);
+                                                       sub.schedule(container, 
context, true);
+                                               }
+                                               container.deactivate(rga, 1);
+//                                     }
+                               }
                        }
                }
                return foundCaller;

Modified: branches/db4o/freenet/src/freenet/support/RandomGrabArray.java
===================================================================
--- branches/db4o/freenet/src/freenet/support/RandomGrabArray.java      
2008-07-01 10:41:01 UTC (rev 20896)
+++ branches/db4o/freenet/src/freenet/support/RandomGrabArray.java      
2008-07-01 10:59:34 UTC (rev 20897)
@@ -6,6 +6,7 @@
 import com.db4o.ObjectContainer;

 import freenet.client.async.ClientContext;
+import freenet.client.async.SplitFileFetcherSubSegment;

 /**
  * An array which supports very fast remove-and-return-a-random-element.
@@ -282,4 +283,11 @@
        public void objectOnActivate(ObjectContainer container) {
                container.activate(contents, 1);
        }
+
+       public boolean contains(RandomGrabArrayItem item, ObjectContainer 
container) {
+               container.activate(contents, 1);
+               boolean ret = contents.contains(item);
+               container.deactivate(contents, 1);
+               return ret;
+       }
 }


Reply via email to