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;
+ }
}