Author: toad
Date: 2008-06-26 18:11:32 +0000 (Thu, 26 Jun 2008)
New Revision: 20770
Modified:
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcher.java
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
Log:
More activation
Modified: branches/db4o/freenet/src/freenet/client/async/SplitFileFetcher.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SplitFileFetcher.java
2008-06-26 18:07:37 UTC (rev 20769)
+++ branches/db4o/freenet/src/freenet/client/async/SplitFileFetcher.java
2008-06-26 18:11:32 UTC (rev 20770)
@@ -184,7 +184,9 @@
SplitFileFetcherSegment s = segments[i];
if(persistent)
container.activate(s, 1);
- if(!s.isFinished()) throw new
IllegalStateException("Not all finished");
+ if(!s.succeeded()) {
+ throw new IllegalStateException("Not all
finished");
+ }
s.throwError();
// If still here, it succeeded
finalLength += s.decodedLength();
@@ -236,7 +238,7 @@
for(int i=0;i<segments.length;i++) {
if(persistent)
container.activate(segments[i], 1);
- if(!segments[i].isFinished()) {
+ if(!segments[i].isFinished(container)) {
if(logMINOR) Logger.minor(this,
"Segment "+segments[i]+" is not finished");
allDone = false;
}
Modified:
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
2008-06-26 18:07:37 UTC (rev 20769)
+++ branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
2008-06-26 18:11:32 UTC (rev 20770)
@@ -115,12 +115,21 @@
if(checkKeys[i] == null) throw new
NullPointerException("Null: check block "+i);
}
- public synchronized boolean isFinished() {
- return finished || parentFetcher.parent.isCancelled();
+ public synchronized boolean isFinished(ObjectContainer container) {
+ if(finished) return true;
+ if(persistent) {
+ container.activate(parentFetcher, 1);
+ container.activate(parentFetcher.parent, 1);
+ }
+ return parentFetcher.parent.isCancelled();
}
+
+ public synchronized boolean succeeded() {
+ return finished;
+ }
- public synchronized boolean isFinishing() {
- return isFinished() || finishing;
+ public synchronized boolean isFinishing(ObjectContainer container) {
+ return isFinished(container) || finishing;
}
/** Throw a FetchException, if we have one. Else do nothing. */
@@ -393,7 +402,7 @@
NodeCHK key = getBlockNodeKey(blockNo, container);
if(key != null) seg.unregisterKey(key, context);
synchronized(this) {
- if(isFinishing()) return; // this failure is now
irrelevant, and cleanup will occur on the decoder thread
+ if(isFinishing(container)) return; // this failure is
now irrelevant, and cleanup will occur on the decoder thread
if(blockNo < dataKeys.length) {
if(dataKeys[blockNo] == null) {
Logger.error(this, "Block already
finished: "+blockNo);
@@ -440,7 +449,7 @@
ClientCHK key;
SplitFileFetcherSubSegment sub = null;
synchronized(this) {
- if(isFinished()) return;
+ if(isFinished(container)) return;
if(blockNo < dataKeys.length) {
key = dataKeys[blockNo];
if(persistent)
@@ -612,7 +621,7 @@
* case we get duplicated structures in memory.
* @return True if we removed the subsegment.
*/
- public synchronized boolean maybeRemoveSeg(SplitFileFetcherSubSegment
segment) {
+ public synchronized boolean maybeRemoveSeg(SplitFileFetcherSubSegment
segment, ObjectContainer container) {
int retryCount = segment.retryCount;
boolean dontRemove = true;
for(int i=0;i<dataRetries.length;i++)
@@ -625,7 +634,7 @@
dontRemove = false;
break;
}
- if(isFinishing()) dontRemove = false;
+ if(isFinishing(container)) dontRemove = false;
if(dontRemove) return false;
if(logMINOR)
Logger.minor(this, "Removing sub segment: "+segment+"
for retry count "+retryCount);
@@ -664,7 +673,7 @@
Vector v = null;
boolean notFound = true;
synchronized(this) {
- if(isFinishing()) return;
+ if(isFinishing(container)) return;
int maxTries = blockFetchContext.maxNonSplitfileRetries;
for(int i=0;i<dataKeys.length;i++) {
if(dataKeys[i] == null) continue;
Modified:
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
===================================================================
---
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
2008-06-26 18:07:37 UTC (rev 20769)
+++
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
2008-06-26 18:11:32 UTC (rev 20770)
@@ -86,9 +86,9 @@
}
ClientKey key =
segment.getBlockKey(((Integer)token).intValue(), container);
if(key == null) {
- if(segment.isFinished()) {
+ if(segment.isFinished(container)) {
Logger.error(this, "Segment finished
but didn't tell us! "+this);
- } else if(segment.isFinishing()) {
+ } else if(segment.isFinishing(container)) {
Logger.error(this, "Segment finishing
but didn't tell us! "+this);
} else {
Logger.error(this, "Segment not
finishing yet still returns null for getKey()!: "+token+" for "+this, new
Exception("debug"));
@@ -141,7 +141,7 @@
ret = (Integer) blockNums.remove(x);
Key key =
segment.getBlockNodeKey(((Integer)ret).intValue(), container);
if(key == null) {
- if(segment.isFinishing() ||
segment.isFinished()) return null;
+ if(segment.isFinishing(container) ||
segment.isFinished(container)) return null;
Logger.error(this, "Key is null for
block "+ret+" for "+this);
continue;
}
@@ -443,7 +443,7 @@
if(!blockNums.isEmpty()) return;
if(logMINOR)
Logger.minor(this, "Definitely removing from
parent: "+this);
- if(!segment.maybeRemoveSeg(this)) return;
+ if(!segment.maybeRemoveSeg(this, container)) return;
}
unregister(false, container);
}