Author: toad
Date: 2008-06-26 19:03:26 +0000 (Thu, 26 Jun 2008)
New Revision: 20779

Modified:
   branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
Log:
Hmmm, I think that was this commit! :)

Modified: 
branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java  
2008-06-26 19:02:35 UTC (rev 20778)
+++ branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java  
2008-06-26 19:03:26 UTC (rev 20779)
@@ -163,7 +163,7 @@
        /**
         * Register and then delete the RegisterMe which is passed in to avoid 
querying.
         */
-       public void register(final SendableRequest req, boolean 
onDatabaseThread, final RegisterMe reg) {
+       public void register(final SendableRequest req, boolean 
onDatabaseThread, RegisterMe reg) {
                logMINOR = Logger.shouldLog(Logger.MINOR, this);
                if(logMINOR) Logger.minor(this, "Registering "+req, new 
Exception("debug"));
                final boolean persistent = req.persistent();
@@ -174,7 +174,9 @@

                        if(persistent && onDatabaseThread) {
                                schedCore.addPendingKeys(getter, 
selectorContainer);
-                               schedCore.queueRegister(getter, 
databaseExecutor, selectorContainer);
+                               if(reg == null)
+                                       reg = schedCore.queueRegister(getter, 
databaseExecutor, selectorContainer);
+                               final RegisterMe regme = reg;
                                final Object[] keyTokens = 
getter.sendableKeys(selectorContainer);
                                final ClientKey[] keys = new 
ClientKey[keyTokens.length];
                                for(int i=0;i<keyTokens.length;i++) {
@@ -186,17 +188,21 @@
                                datastoreCheckerExecutor.execute(new Runnable() 
{

                                        public void run() {
-                                               registerCheckStore(getter, 
true, keyTokens, keys, reg, blocks, dontCache);
+                                               registerCheckStore(getter, 
true, keyTokens, keys, regme, blocks, dontCache);
                                        }

                                }, getter.getPriorityClass(selectorContainer), 
"Checking datastore");
                        } else if(persistent) {
+                               final RegisterMe regme = reg;
                                jobRunner.queue(new DBJob() {

                                        public void run(ObjectContainer 
container, ClientContext context) {
                                                container.activate(getter, 1);
                                                
schedCore.addPendingKeys(getter, container);
-                                               schedCore.queueRegister(getter, 
databaseExecutor, container);
+                                               RegisterMe reg = regme;
+                                               if(reg == null)
+                                                       reg = 
schedCore.queueRegister(getter, databaseExecutor, container);
+                                               final RegisterMe regInner = reg;
                                                final Object[] keyTokens = 
getter.sendableKeys(container);
                                                final ClientKey[] keys = new 
ClientKey[keyTokens.length];
                                                for(int 
i=0;i<keyTokens.length;i++) {
@@ -208,7 +214,7 @@
                                                
datastoreCheckerExecutor.execute(new Runnable() {

                                                        public void run() {
-                                                               
registerCheckStore(getter, true, keyTokens, keys, reg, blocks, dontCache);
+                                                               
registerCheckStore(getter, true, keyTokens, keys, regInner, blocks, dontCache);
                                                        }

                                                }, 
getter.getPriorityClass(container), "Checking datastore");
@@ -237,11 +243,14 @@
                                        schedCore.queueRegister(req, 
databaseExecutor, selectorContainer);
                                        finishRegister(req, persistent, false, 
true, reg);
                                } else {
+                                       final RegisterMe regme = reg;
                                        jobRunner.queue(new DBJob() {

                                                public void run(ObjectContainer 
container, ClientContext context) {
                                                        container.activate(req, 
1);
-                                                       
schedCore.queueRegister(req, databaseExecutor, selectorContainer);
+                                                       RegisterMe reg = regme;
+                                                       if(reg == null)
+                                                               reg = 
schedCore.queueRegister(req, databaseExecutor, selectorContainer);
                                                        // Pretend to not be on 
the database thread.
                                                        // In some places (e.g. 
SplitFileInserter.start(), we call register() *many* times within a single 
transaction.
                                                        // We can greatly 
improve responsiveness at the cost of some throughput and RAM by only adding 
the tags at this point.


Reply via email to