Author: toad
Date: 2008-06-18 17:39:39 +0000 (Wed, 18 Jun 2008)
New Revision: 20437
Modified:
branches/db4o/freenet/src/freenet/client/async/USKFetcherTag.java
branches/db4o/freenet/src/freenet/client/async/USKManagerPersistent.java
Log:
USKFetcherTag's: don't restart on startup if already finished
Modified: branches/db4o/freenet/src/freenet/client/async/USKFetcherTag.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/USKFetcherTag.java
2008-06-18 17:33:07 UTC (rev 20436)
+++ branches/db4o/freenet/src/freenet/client/async/USKFetcherTag.java
2008-06-18 17:39:39 UTC (rev 20437)
@@ -5,6 +5,7 @@
import freenet.client.FetchContext;
import freenet.keys.USK;
import freenet.node.RequestClient;
+import freenet.support.Logger;
import freenet.support.io.NativeThread;
/**
@@ -34,6 +35,7 @@
private transient USKFetcher fetcher;
private short pollingPriorityNormal;
private short pollingPriorityProgress;
+ private boolean finished;
private USKFetcherTag(USK origUSK, USKFetcherCallback callback, long
nodeDBHandle, boolean persistent, ObjectContainer container, FetchContext ctx,
boolean keepLastData, long token) {
this.nodeDBHandle = nodeDBHandle;
@@ -93,8 +95,24 @@
public void cancel(ObjectContainer container, ClientContext context) {
if(fetcher != null) fetcher.cancel(container, context);
+ finish(context);
}
+ private void finish(ClientContext context) {
+ synchronized(this) {
+ finished = true;
+ }
+ if(persistent) {
+ context.jobRunner.queue(new DBJob() {
+
+ public void run(ObjectContainer container,
ClientContext context) {
+ container.set(USKFetcherTag.this);
+ }
+
+ }, NativeThread.HIGH_PRIORITY, false);
+ }
+ }
+
public long getToken() {
return token;
}
@@ -104,11 +122,15 @@
}
public void onCancelled(ObjectContainer container, ClientContext
context) {
+ synchronized(this) {
+ finished = true;
+ }
if(persistent) {
context.jobRunner.queue(new DBJob() {
public void run(ObjectContainer container,
ClientContext context) {
callback.onCancelled(container,
context);
+ container.set(this);
}
}, NativeThread.HIGH_PRIORITY, false);
@@ -118,11 +140,15 @@
}
public void onFailure(ObjectContainer container, ClientContext context)
{
+ synchronized(this) {
+ finished = true;
+ }
if(persistent) {
context.jobRunner.queue(new DBJob() {
public void run(ObjectContainer container,
ClientContext context) {
callback.onFailure(container, context);
+ container.set(this);
}
}, NativeThread.HIGH_PRIORITY, false);
@@ -140,11 +166,19 @@
}
public void onFoundEdition(final long l, final USK key, ObjectContainer
container, ClientContext context, final boolean metadata, final short codec,
final byte[] data) {
+ synchronized(this) {
+ if(fetcher == null) {
+ Logger.error(this, "onFoundEdition but fetcher
is null - isn't onFoundEdition() terminal for USKFetcherCallback's??", new
Exception("debug"));
+ }
+ finished = true;
+ fetcher = null;
+ }
if(persistent) {
context.jobRunner.queue(new DBJob() {
public void run(ObjectContainer container,
ClientContext context) {
callback.onFoundEdition(l, key,
container, context, metadata, codec, data);
+ container.set(this);
}
}, NativeThread.HIGH_PRIORITY, false);
@@ -156,5 +190,9 @@
public void removeFromDatabase(ObjectContainer container) {
container.delete(this);
}
+
+ public final boolean isFinished() {
+ return finished;
+ }
}
Modified:
branches/db4o/freenet/src/freenet/client/async/USKManagerPersistent.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/USKManagerPersistent.java
2008-06-18 17:33:07 UTC (rev 20436)
+++ branches/db4o/freenet/src/freenet/client/async/USKManagerPersistent.java
2008-06-18 17:39:39 UTC (rev 20437)
@@ -14,7 +14,9 @@
static void init(USKManager manager, ObjectContainer container, final
ClientContext context) {
ObjectSet set = container.query(new Predicate() {
public boolean match(USKFetcherTag tag) {
- return tag.nodeDBHandle == context.nodeDBHandle;
+ if(tag.nodeDBHandle != context.nodeDBHandle)
return false;
+ if(tag.isFinished()) return false;
+ return true;
}
});
while(set.hasNext()) {