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() {