Author: toad
Date: 2008-07-23 13:06:37 +0000 (Wed, 23 Jul 2008)
New Revision: 21341

Modified:
   branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
Log:
Activation/deactivation

Modified: 
branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java  
2008-07-23 12:54:04 UTC (rev 21340)
+++ branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java  
2008-07-23 13:06:37 UTC (rev 21341)
@@ -240,7 +240,19 @@

                                        public void run(ObjectContainer 
container, ClientContext context) {
                                                // registerOffThread would be 
pointless because this is a separate job.
+                                               if(listener != null)
+                                                       
container.activate(listener, 1);
+                                               if(getters != null) {
+                                                       for(int 
i=0;i<getters.length;i++)
+                                                               
container.activate(getters[i], 1);
+                                               }
                                                innerRegister(listener, 
getters, false, persistent, blocks, oldReg);
+                                               if(listener != null)
+                                                       
container.deactivate(listener, 1);
+                                               if(getters != null) {
+                                                       for(int 
i=0;i<getters.length;i++)
+                                                               
container.deactivate(getters[i], 1);
+                                               }
                                        }

                                }, NativeThread.NORM_PRIORITY, false);
@@ -297,6 +309,12 @@
                                                                
container.activate(getters[i], 1);
                                                }
                                                register(listener, getters, 
false, true, true, blocks, regme);
+                                               if(listener != null)
+                                                       
container.deactivate(listener, 1);
+                                               if(getters != null) {
+                                                       for(int 
i=0;i<getters.length;i++)
+                                                               
container.deactivate(getters[i], 1);
+                                               }
                                        }

                                }, NativeThread.NORM_PRIORITY, false);
@@ -328,6 +346,11 @@
                                        }

                                }, prio, "Checking datastore");
+                               selectorContainer.deactivate(listener, 1);
+                               if(getters != null) {
+                                       for(int i=0;i<getters.length;i++)
+                                               
selectorContainer.deactivate(getters[i], 1);
+                               }

                        }
                } else {
@@ -443,6 +466,7 @@
                                                boolean wereAnyValid = false;
                                                for(int 
i=0;i<getters.length;i++) {
                                                        SendableGet getter = 
getters[i];
+                                                       
selectorContainer.activate(getters[i], 1);
                                                        
if(!(getter.isCancelled(selectorContainer) || 
getter.isEmpty(selectorContainer))) {
                                                                wereAnyValid = 
true;
                                                                
schedCore.innerRegister(getter, random, selectorContainer);
@@ -467,10 +491,12 @@
                                                boolean wereAnyValid = false;
                                                for(int 
i=0;i<getters.length;i++) {
                                                        SendableGet getter = 
getters[i];
+                                                       
container.activate(getters[i], 1);
                                                        
if(!(getter.isCancelled(selectorContainer) || 
getter.isEmpty(selectorContainer))) {
                                                                wereAnyValid = 
true;
                                                                
schedCore.innerRegister(getter, random, selectorContainer);
                                                        }
+                                                       
container.deactivate(getters[i], 1);
                                                }
                                                if(!wereAnyValid) {
                                                        Logger.normal(this, "No 
requests valid: "+getters);
@@ -614,7 +640,12 @@
                                                Logger.normal(this, "Selected 
"+sameKey+" requests from same SendableRequest: "+lastReq);
                                        sameKey = 0;
                                }
-                               if(req == null) return;
+                               if(req == null) {
+                                       if(lastReq != null) {
+                                               container.deactivate(lastReq, 
1);
+                                       }
+                                       return;
+                               }
                                lastReq = req.request;
                                if(logMINOR) Logger.minor(this, "Activating 
key");
                                container.activate(req.key, 5);
@@ -629,7 +660,12 @@
                                                        Logger.minor(this, 
"Added to starterQueue: "+req+" size now "+starterQueue.size());
                                                req = null;
                                        }
-                                       if(starterQueue.size() >= 
MAX_STARTER_QUEUE_SIZE) return;
+                                       if(starterQueue.size() >= 
MAX_STARTER_QUEUE_SIZE) {
+                                               if(lastReq != null) {
+                                                       
container.deactivate(lastReq, 1);
+                                               }
+                                               return;
+                                       }
                                }
                        }
                }
@@ -719,8 +755,10 @@
                        jobRunner.queue(new DBJob() {

                                public void run(ObjectContainer container, 
ClientContext context) {
+                                       container.activate(succeeded, 1);
                                        schedCore.succeeded(succeeded, 
container);
                                        
container.delete((PersistentChosenRequest)req);
+                                       container.deactivate(succeeded, 1);
                                }

                        }, TRIP_PENDING_PRIORITY, false);
@@ -770,7 +808,8 @@
                jobRunner.queue(new DBJob() {

                        public void run(ObjectContainer container, 
ClientContext context) {
-                               container.activate(key, 1);
+                               // FIXME is this necessary? the key is probably 
non-persistent, no?
+                               container.activate(key, 5);
                                if(logMINOR) Logger.minor(this, "tripPendingKey 
for "+key);
                                final GotKeyListener[] gets = 
schedCore.removePendingKey(key, container);
                                if(gets == null) return;
@@ -792,6 +831,7 @@
                                                if(logMINOR) Logger.minor(this, 
"Calling tripPendingKey() callback for "+gets[i]+" for "+key);
                                                container.activate(gets[i], 1);
                                                gets[i].onGotKey(key, block, 
container, context);
+                                               container.deactivate(gets[i], 
1);
                                        } catch (Throwable t) {
                                                Logger.error(this, "Caught 
"+t+" running tripPendingKey() callback "+gets[i]+" for "+key, t);
                                        }
@@ -823,11 +863,12 @@
                jobRunner.queue(new DBJob() {

                        public void run(ObjectContainer container, 
ClientContext context) {
-                               container.activate(key, 1);
+                               container.activate(key, 5);
                                short priority = schedCore.getKeyPrio(key, 
oldPrio, container);
                                if(priority >= oldPrio) return; // already on 
list at >= priority
                                offeredKeys[priority].queueKey(key);
                                starter.wakeUp();
+                               container.deactivate(key, 5);
                        }

                }, NativeThread.NORM_PRIORITY, false);
@@ -909,6 +950,8 @@
                                        req.requeueAfterCooldown(key, now, 
container, clientContext);
                                }
                        }
+                       if(persistent)
+                               container.deactivate(key, 5);
                }
                return found;
        }


Reply via email to