Author: j16sdiz
Date: 2008-12-20 16:01:36 +0000 (Sat, 20 Dec 2008)
New Revision: 24674
Modified:
trunk/freenet/src/freenet/client/async/SplitFileFetcher.java
trunk/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
trunk/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
Log:
set parent=null when cancel()
Modified: trunk/freenet/src/freenet/client/async/SplitFileFetcher.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SplitFileFetcher.java
2008-12-20 15:56:12 UTC (rev 24673)
+++ trunk/freenet/src/freenet/client/async/SplitFileFetcher.java
2008-12-20 16:01:36 UTC (rev 24674)
@@ -33,7 +33,7 @@
final ArchiveContext archiveContext;
final LinkedList decompressors;
final ClientMetadata clientMetadata;
- final ClientRequester parent;
+ ClientRequester parent;
final GetCompletionCallback cb;
final int recursionLevel;
/** The splitfile type. See the SPLITFILE_ constants on Metadata. */
@@ -295,6 +295,7 @@
public void cancel() {
for(int i=0;i<segments.length;i++)
segments[i].cancel();
+ parent = null;
}
public long getToken() {
@@ -302,6 +303,9 @@
}
public void scheduleOffThread() {
+ if (parent == null)
+ return;
+
fetchContext.slowSerialExecutor[parent.priorityClass].execute(new Runnable() {
public void run() {
schedule();
Modified: trunk/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
2008-12-20 15:56:12 UTC (rev 24673)
+++ trunk/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
2008-12-20 16:01:36 UTC (rev 24674)
@@ -124,7 +124,7 @@
}
public synchronized boolean isFinished() {
- return finished || parentFetcher.parent.isCancelled();
+ return finished || parentFetcher.parent == null ||
parentFetcher.parent.isCancelled();
}
public synchronized boolean isFinishing() {
@@ -171,7 +171,7 @@
boolean decodeNow = false;
logMINOR = Logger.shouldLog(Logger.MINOR, this);
if(logMINOR) Logger.minor(this, "Fetched block "+blockNo+" on
"+seg+" data="+dataBuckets.length+" check="+checkBuckets.length);
- if(parentFetcher.parent instanceof ClientGetter)
+ if (parentFetcher.parent != null && parentFetcher.parent
instanceof ClientGetter)
((ClientGetter)parentFetcher.parent).addKeyToBinaryBlob(block);
// No need to unregister key, because it will be cleared in
tripPendingKey().
boolean dontNotify;
@@ -354,14 +354,14 @@
}
boolean isCollectingBinaryBlob() {
- if(parentFetcher.parent instanceof ClientGetter) {
+ if (parentFetcher.parent != null && parentFetcher.parent
instanceof ClientGetter) {
ClientGetter getter = (ClientGetter)
(parentFetcher.parent);
return getter.collectingBinaryBlob();
} else return false;
}
private void maybeAddToBinaryBlob(Bucket data, int i, boolean check)
throws FetchException {
- if(parentFetcher.parent instanceof ClientGetter) {
+ if (parentFetcher.parent != null && parentFetcher.parent
instanceof ClientGetter) {
ClientGetter getter = (ClientGetter)
(parentFetcher.parent);
if(getter.collectingBinaryBlob()) {
try {
@@ -410,9 +410,11 @@
// :(
if(e.isFatal()) {
fatallyFailedBlocks++;
+ if (parentFetcher.parent != null)
parentFetcher.parent.fatallyFailedBlock();
} else {
failedBlocks++;
+ if (parentFetcher.parent != null)
parentFetcher.parent.failedBlock();
}
// Once it is no longer possible to have a successful
fetch, fail...
@@ -541,7 +543,8 @@
synchronized(this) {
scheduled = true;
}
- parentFetcher.parent.notifyClients();
+ if (parentFetcher.parent != null)
+ parentFetcher.parent.notifyClients();
if(logMINOR)
Logger.minor(this, "scheduling "+seg+" :
"+seg.blockNums);
} catch (Throwable t) {
Modified: trunk/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
2008-12-20 15:56:12 UTC (rev 24673)
+++ trunk/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
2008-12-20 16:01:36 UTC (rev 24674)
@@ -302,7 +302,10 @@
@Override
public Object getClient() {
- return segment.parentFetcher.parent.getClient();
+ if (segment.parentFetcher.parent != null)
+ return segment.parentFetcher.parent.getClient();
+ else
+ return null;
}
@Override
@@ -312,7 +315,10 @@
@Override
public short getPriorityClass() {
- return segment.parentFetcher.parent.priorityClass;
+ if (segment.parentFetcher.parent != null)
+ return segment.parentFetcher.parent.priorityClass;
+ else
+ return -1;
}
@Override
_______________________________________________
cvs mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs