Author: toad
Date: 2008-07-10 21:29:52 +0000 (Thu, 10 Jul 2008)
New Revision: 21039

Modified:
   branches/db4o/freenet/src/freenet/client/async/BaseSingleFileFetcher.java
   branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
   
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java
   
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
Log:
Delete the old RegisterMe.

Modified: 
branches/db4o/freenet/src/freenet/client/async/BaseSingleFileFetcher.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/BaseSingleFileFetcher.java   
2008-07-10 21:15:33 UTC (rev 21038)
+++ branches/db4o/freenet/src/freenet/client/async/BaseSingleFileFetcher.java   
2008-07-10 21:29:52 UTC (rev 21039)
@@ -228,7 +228,7 @@
        }

        public void schedule(ObjectContainer container, ClientContext context, 
boolean delayed) {
-               getScheduler(context).register(this, new SendableGet[] { this 
}, delayed, persistent, true, ctx.blocks);
+               getScheduler(context).register(this, new SendableGet[] { this 
}, delayed, persistent, true, ctx.blocks, null);
        }

        public SendableGet getRequest(Key key, ObjectContainer container) {

Modified: 
branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java  
2008-07-10 21:15:33 UTC (rev 21038)
+++ branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java  
2008-07-10 21:29:52 UTC (rev 21039)
@@ -13,10 +13,8 @@
 import freenet.config.SubConfig;
 import freenet.crypt.RandomSource;
 import freenet.keys.ClientKey;
-import freenet.keys.ClientKeyBlock;
 import freenet.keys.Key;
 import freenet.keys.KeyBlock;
-import freenet.keys.KeyVerifyException;
 import freenet.node.BaseSendableGet;
 import freenet.node.KeysFetchingLocally;
 import freenet.node.LowLevelGetException;
@@ -192,19 +190,19 @@
         * NOTE: delayedStoreCheck/probablyNotInStore is unnecessary because we 
only
         * register the listener once.
         */
-       public void register(final GotKeyListener listener, final SendableGet[] 
getters, boolean registerOffThread, final boolean persistent, boolean 
onDatabaseThread, final BlockSet blocks) {
+       public void register(final GotKeyListener listener, final SendableGet[] 
getters, boolean registerOffThread, final boolean persistent, boolean 
onDatabaseThread, final BlockSet blocks, final RegisterMe oldReg) {
                logMINOR = Logger.shouldLog(Logger.MINOR, this);
                if(logMINOR)
                        Logger.minor(this, 
"register("+persistent+","+listener+","+getters+","+registerOffThread);
                if(persistent) {
                        if(onDatabaseThread) {
-                               innerRegister(listener, getters, 
registerOffThread, persistent, blocks);
+                               innerRegister(listener, getters, 
registerOffThread, persistent, blocks, oldReg);
                        } else {
                                jobRunner.queue(new DBJob() {

                                        public void run(ObjectContainer 
container, ClientContext context) {
                                                // registerOffThread would be 
pointless because this is a separate job.
-                                               innerRegister(listener, 
getters, false, persistent, blocks);
+                                               innerRegister(listener, 
getters, false, persistent, blocks, oldReg);
                                        }

                                }, NativeThread.NORM_PRIORITY, false);
@@ -230,17 +228,20 @@
        }


-       private void innerRegister(final GotKeyListener listener, final 
SendableGet[] getters, boolean registerOffThread, boolean persistent, final 
BlockSet blocks) {
+       private void innerRegister(final GotKeyListener listener, final 
SendableGet[] getters, boolean registerOffThread, boolean persistent, final 
BlockSet blocks, RegisterMe reg) {
                if(listener != null) {
                        if(registerOffThread) {
                                short prio = 
listener.getPriorityClass(selectorContainer);
-                               RegisterMe regme = new RegisterMe(listener, 
getters, prio, schedCore, blocks);
-                               selectorContainer.set(regme);
+                               if(reg == null) {
+                                       reg = new RegisterMe(listener, getters, 
prio, schedCore, blocks);
+                                       selectorContainer.set(reg);
+                               }
+                               final RegisterMe regme = reg;
                                if(logMINOR) Logger.minor(this, "Added regme: 
"+regme);
                                jobRunner.queue(new DBJob() {

                                        public void run(ObjectContainer 
container, ClientContext context) {
-                                               register(listener, getters, 
false, true, true, blocks);
+                                               register(listener, getters, 
false, true, true, blocks, regme);
                                        }

                                }, NativeThread.NORM_PRIORITY, false);
@@ -248,12 +249,16 @@
                        } else {
                                short prio = 
listener.getPriorityClass(selectorContainer);
                                schedCore.addPendingKeys(listener, 
selectorContainer);
-                               final RegisterMe regme;
-                               if(getters != null) {
-                                       regme = new RegisterMe(null, getters, 
prio, schedCore, blocks);
-                                       selectorContainer.set(regme);
-                                       if(logMINOR) Logger.minor(this, "Added 
regme: "+regme);
-                               } else regme = null; // Nothing to finish 
registering.
+                               if(reg == null && getters != null) {
+                                       reg = new RegisterMe(null, getters, 
prio, schedCore, blocks);
+                                       selectorContainer.set(reg);
+                                       if(logMINOR) Logger.minor(this, "Added 
regme: "+reg);
+                               } else {
+                                       if(reg != null)
+                                               selectorContainer.delete(reg);
+                                       reg = null; // Nothing to finish 
registering.
+                               }
+                               final RegisterMe regme = reg;
                                // Check the datastore before proceding.
                                final Key[] keys = 
listener.listKeys(selectorContainer);
                                final boolean dontCache = 
listener.dontCache(selectorContainer);

Modified: 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java
===================================================================
--- 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java  
    2008-07-10 21:15:33 UTC (rev 21038)
+++ 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java  
    2008-07-10 21:29:52 UTC (rev 21039)
@@ -553,7 +553,7 @@
                                        Logger.minor(this, "Running RegisterMe 
for "+reg.listener+" and "+reg.getters+" : "+reg.key.addedTime+" : 
"+reg.key.priority);
                                // Don't need to activate, fields should exist? 
FIXME
                                try {
-                                       sched.register(reg.listener, 
reg.getters, false, true, true, reg.blocks);
+                                       sched.register(reg.listener, 
reg.getters, false, true, true, reg.blocks, null);
                                } catch (Throwable t) {
                                        Logger.error(this, "Caught "+t+" 
running RegisterMeRunner", t);
                                        // Cancel the request, and commit so it 
isn't tried again.

Modified: 
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
===================================================================
--- 
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java  
    2008-07-10 21:15:33 UTC (rev 21038)
+++ 
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java  
    2008-07-10 21:29:52 UTC (rev 21039)
@@ -457,7 +457,7 @@
                if(persistent)
                        container.set(blockNums);
                if(schedule)
-                       context.getChkFetchScheduler().register(null, new 
SendableGet[] { this }, false, persistent, true, null);
+                       context.getChkFetchScheduler().register(null, new 
SendableGet[] { this }, false, persistent, true, null, null);
        }

        public String toString() {
@@ -586,7 +586,7 @@
        }

        public void schedule(ObjectContainer container, ClientContext context, 
boolean firstTime, boolean regmeOnly) {
-               getScheduler(context).register(firstTime ? segment : null, new 
SendableGet[] { this }, regmeOnly, persistent, true, 
segment.blockFetchContext.blocks);
+               getScheduler(context).register(firstTime ? segment : null, new 
SendableGet[] { this }, regmeOnly, persistent, true, 
segment.blockFetchContext.blocks, null);
        }

        public void removeBlockNum(int blockNum) {


Reply via email to