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


Reply via email to