Author: toad
Date: 2008-08-29 23:33:28 +0000 (Fri, 29 Aug 2008)
New Revision: 22238
Modified:
branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
branches/db4o/freenet/src/freenet/client/async/PersistentChosenRequest.java
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
Log:
Pass in a parameter to PCR.finish, PCR.onDumped to not activate/deactivate.
Modified:
branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
2008-08-29 23:29:57 UTC (rev 22237)
+++ branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
2008-08-29 23:33:28 UTC (rev 22238)
@@ -578,7 +578,7 @@
return false;
}
- void removeFromStarterQueue(SendableRequest req, ObjectContainer
container) {
+ void removeFromStarterQueue(SendableRequest req, ObjectContainer
container, boolean reqAlreadyActive) {
PersistentChosenRequest dumped = null;
synchronized(starterQueue) {
for(int i=0;i<starterQueue.size();i++) {
@@ -591,7 +591,7 @@
}
}
if(dumped != null)
- dumped.onDumped(schedCore, container);
+ dumped.onDumped(schedCore, container, reqAlreadyActive);
}
int starterQueueSize() {
@@ -739,7 +739,7 @@
}
if(dumped == null) return;
for(PersistentChosenRequest req : dumped) {
- req.onDumped(schedCore, container);
+ req.onDumped(schedCore, container, false);
}
}
Modified:
branches/db4o/freenet/src/freenet/client/async/PersistentChosenRequest.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/PersistentChosenRequest.java
2008-08-29 23:29:57 UTC (rev 22237)
+++ branches/db4o/freenet/src/freenet/client/async/PersistentChosenRequest.java
2008-08-29 23:33:28 UTC (rev 22238)
@@ -134,16 +134,17 @@
context.jobRunner.queue(new DBJob() {
public void run(ObjectContainer container,
ClientContext context) {
- finish(container, context, false);
+ finish(container, context, false, false);
}
}, NativeThread.NORM_PRIORITY + 1, false);
}
- private void finish(ObjectContainer container, ClientContext context,
boolean dumping) {
- if(container.ext().isActive(request))
- Logger.error(this, "ALREADY ACTIVATED: "+request);
- container.activate(request, 1);
+ private void finish(ObjectContainer container, ClientContext context,
boolean dumping, boolean alreadyActive) {
+ if((!alreadyActive) && container.ext().isActive(request))
+ Logger.error(this, "ALREADY ACTIVATED: "+request, new
Exception("debug"));
+ if(!alreadyActive)
+ container.activate(request, 1);
Logger.normal(this, "Finishing "+this+" for "+request);
// Call all the callbacks.
PersistentChosenBlock[] finishedBlocks;
@@ -151,7 +152,8 @@
if(finished) {
if(blocksFinished.isEmpty()) {
// Okay...
- container.deactivate(request, 1);
+ if(!alreadyActive)
+ container.deactivate(request,
1);
return;
} else {
Logger.error(this, "Finished but
blocksFinished not empty on "+this, new Exception("debug"));
@@ -166,7 +168,8 @@
Logger.error(this, "No finished blocks in
finish() on "+this);
else if(logMINOR)
Logger.minor(this, "No finished blocks in
finish() on "+this);
- container.deactivate(request, 1);
+ if(!alreadyActive)
+ container.deactivate(request, 1);
return;
}
if(request instanceof SendableGet) {
@@ -202,7 +205,8 @@
}
}
scheduler.removeRunningRequest(request);
- container.deactivate(request, 1);
+ if(!alreadyActive)
+ container.deactivate(request, 1);
}
public synchronized ChosenBlock grabNotStarted(Random random,
RequestScheduler sched) {
@@ -225,7 +229,7 @@
return blocksNotStarted.size();
}
- public void onDumped(ClientRequestSchedulerCore core, ObjectContainer
container) {
+ public void onDumped(ClientRequestSchedulerCore core, ObjectContainer
container, boolean reqAlreadyActive) {
if(logMINOR)
Logger.minor(this, "Dumping "+this);
boolean wasStarted;
@@ -235,7 +239,7 @@
}
if(!wasStarted) {
if(logMINOR) Logger.minor(this, "Finishing immediately
in onDumped() as nothing pending: "+this);
- finish(container, core.sched.clientContext, true);
+ finish(container, core.sched.clientContext, true,
reqAlreadyActive);
}
}
Modified:
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
2008-08-29 23:29:57 UTC (rev 22237)
+++ branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
2008-08-29 23:33:28 UTC (rev 22238)
@@ -889,7 +889,7 @@
if(persistent)
container.activate(deadSegs[i], 1);
deadSegs[i].kill(container, context, true);
-
context.getChkFetchScheduler().removeFromStarterQueue(deadSegs[i], container);
+
context.getChkFetchScheduler().removeFromStarterQueue(deadSegs[i], container,
true);
if(persistent)
container.deactivate(deadSegs[i], 1);
}