Author: toad
Date: 2008-04-05 11:29:18 +0000 (Sat, 05 Apr 2008)
New Revision: 19007

Modified:
   trunk/freenet/src/freenet/client/async/BaseSingleFileFetcher.java
   trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java
   trunk/freenet/src/freenet/client/async/SimpleSingleFileFetcher.java
   trunk/freenet/src/freenet/client/async/SingleBlockInserter.java
   trunk/freenet/src/freenet/client/async/SingleFileFetcher.java
   trunk/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
   trunk/freenet/src/freenet/client/async/USKChecker.java
   trunk/freenet/src/freenet/node/SendableGet.java
   trunk/freenet/src/freenet/node/SendableRequest.java
   trunk/freenet/src/freenet/node/SimpleSendableInsert.java
Log:
Add boolean staySubscribed to unregister().
Use it in ClientRequestScheduler when changing priorities.
Currently when we resubscribe we lose the subscription because addPendingKey() 
is called in register(), not innerRegister().
Impact of bug: when changing priorities, we lose keys... I'm not sure how many, 
maybe lots...

Modified: trunk/freenet/src/freenet/client/async/BaseSingleFileFetcher.java
===================================================================
--- trunk/freenet/src/freenet/client/async/BaseSingleFileFetcher.java   
2008-04-05 10:34:09 UTC (rev 19006)
+++ trunk/freenet/src/freenet/client/async/BaseSingleFileFetcher.java   
2008-04-05 11:29:18 UTC (rev 19007)
@@ -108,7 +108,7 @@
                synchronized(this) {
                        cancelled = true;
                }
-               super.unregister();
+               super.unregister(false);
        }

        public synchronized boolean isCancelled() {

Modified: trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java
===================================================================
--- trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java  
2008-04-05 10:34:09 UTC (rev 19006)
+++ trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java  
2008-04-05 11:29:18 UTC (rev 19007)
@@ -602,7 +602,7 @@

                for(int i=0;i<reqs.length;i++) {
                        SendableRequest req = reqs[i];
-                       req.unregister();
+                       req.unregister(true);
                        // If we don't reset the cooldown times, the block will 
be lost after 1 failed retry.
                        if(req instanceof SendableGet)
                                ((SendableGet)req).resetCooldownTimes();

Modified: trunk/freenet/src/freenet/client/async/SimpleSingleFileFetcher.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SimpleSingleFileFetcher.java 
2008-04-05 10:34:09 UTC (rev 19006)
+++ trunk/freenet/src/freenet/client/async/SimpleSingleFileFetcher.java 
2008-04-05 11:29:18 UTC (rev 19007)
@@ -100,7 +100,7 @@
                        }
                }
                // :(
-               unregister();
+               unregister(false);
                if(e.isFatal() || forceFatal)
                        parent.fatallyFailedBlock();
                else
@@ -110,7 +110,7 @@

        /** Will be overridden by SingleFileFetcher */
        protected void onSuccess(FetchResult data, RequestScheduler sched) {
-               unregister();
+               unregister(false);
                if(parent.isCancelled()) {
                        data.asBucket().free();
                        onFailure(new FetchException(FetchException.CANCELLED), 
sched);

Modified: trunk/freenet/src/freenet/client/async/SingleBlockInserter.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SingleBlockInserter.java     
2008-04-05 10:34:09 UTC (rev 19006)
+++ trunk/freenet/src/freenet/client/async/SingleBlockInserter.java     
2008-04-05 11:29:18 UTC (rev 19007)
@@ -276,7 +276,7 @@
                        if(finished) return;
                        finished = true;
                }
-               super.unregister();
+               super.unregister(false);
                cb.onFailure(new InsertException(InsertException.CANCELLED), 
this);
        }


Modified: trunk/freenet/src/freenet/client/async/SingleFileFetcher.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SingleFileFetcher.java       
2008-04-05 10:34:09 UTC (rev 19006)
+++ trunk/freenet/src/freenet/client/async/SingleFileFetcher.java       
2008-04-05 11:29:18 UTC (rev 19007)
@@ -173,7 +173,7 @@

        protected void onSuccess(FetchResult result, RequestScheduler sched) {
                this.sched = sched;
-               unregister();
+               unregister(false);
                if(parent.isCancelled()) {
                        if(logMINOR)
                                Logger.minor(this, "Parent is cancelled");

Modified: trunk/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java      
2008-04-05 10:34:09 UTC (rev 19006)
+++ trunk/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java      
2008-04-05 11:29:18 UTC (rev 19007)
@@ -376,7 +376,7 @@
                        if(!segment.maybeRemoveSeg(this)) return;
                        cancelled = true;
                }
-               unregister();
+               unregister(false);
        }

        public void onGotKey(Key key, KeyBlock block, RequestScheduler sched) {
@@ -427,7 +427,7 @@
                if(logMINOR)
                        Logger.minor(this, "Killing "+this);
                // Do unregister() first so can get and unregister each key and 
avoid a memory leak
-               unregister();
+               unregister(false);
                synchronized(segment) {
                        blockNums.clear();
                        cancelled = true;

Modified: trunk/freenet/src/freenet/client/async/USKChecker.java
===================================================================
--- trunk/freenet/src/freenet/client/async/USKChecker.java      2008-04-05 
10:34:09 UTC (rev 19006)
+++ trunk/freenet/src/freenet/client/async/USKChecker.java      2008-04-05 
11:29:18 UTC (rev 19007)
@@ -27,7 +27,7 @@
        }

        public void onSuccess(ClientKeyBlock block, boolean fromStore, Object 
token, RequestScheduler sched) {
-               unregister();
+               unregister(false);
                cb.onSuccess((ClientSSKBlock)block);
        }

@@ -64,7 +64,7 @@
                if(canRetry && retry(sched)) return;

                // Ran out of retries.
-               unregister();
+               unregister(false);
                if(e.code == LowLevelGetException.CANCELLED){
                        cb.onCancelled();
                        return;

Modified: trunk/freenet/src/freenet/node/SendableGet.java
===================================================================
--- trunk/freenet/src/freenet/node/SendableGet.java     2008-04-05 10:34:09 UTC 
(rev 19006)
+++ trunk/freenet/src/freenet/node/SendableGet.java     2008-04-05 11:29:18 UTC 
(rev 19007)
@@ -131,9 +131,10 @@
        /** Reset the cooldown times when the request is reregistered. */
        public abstract void resetCooldownTimes();

-       public final void unregister() {
-               getScheduler().removePendingKeys(this, false);
-               super.unregister();
+       public final void unregister(boolean staySubscribed) {
+               if(!staySubscribed)
+                       getScheduler().removePendingKeys(this, false);
+               super.unregister(staySubscribed);
        }

        public final void unregisterKey(Key key) {

Modified: trunk/freenet/src/freenet/node/SendableRequest.java
===================================================================
--- trunk/freenet/src/freenet/node/SendableRequest.java 2008-04-05 10:34:09 UTC 
(rev 19006)
+++ trunk/freenet/src/freenet/node/SendableRequest.java 2008-04-05 11:29:18 UTC 
(rev 19007)
@@ -68,7 +68,7 @@
                parentGrabArray = parent;
        }

-       public void unregister() {
+       public void unregister(boolean staySubscribed) {
                RandomGrabArray arr = getParentGrabArray();
                if(arr != null) {
                        arr.remove(this);

Modified: trunk/freenet/src/freenet/node/SimpleSendableInsert.java
===================================================================
--- trunk/freenet/src/freenet/node/SimpleSendableInsert.java    2008-04-05 
10:34:09 UTC (rev 19006)
+++ trunk/freenet/src/freenet/node/SimpleSendableInsert.java    2008-04-05 
11:29:18 UTC (rev 19007)
@@ -110,7 +110,7 @@
                        if(finished) return;
                        finished = true;
                }
-               super.unregister();
+               super.unregister(false);
        }

        public boolean shouldCache() {


Reply via email to