Author: toad
Date: 2008-06-26 18:07:37 +0000 (Thu, 26 Jun 2008)
New Revision: 20769
Modified:
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/SplitFileFetcherSegment.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
2008-06-26 18:00:21 UTC (rev 20768)
+++ branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
2008-06-26 18:07:37 UTC (rev 20769)
@@ -390,7 +390,7 @@
if(logMINOR) Logger.minor(this, "Permanently failed block:
"+blockNo+" on "+this+" : "+e, e);
boolean allFailed;
// Since we can't keep the key, we need to unregister for it at
this point to avoid a memory leak
- NodeCHK key = getBlockNodeKey(blockNo);
+ 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
@@ -585,17 +585,21 @@
// Ignore
}
- public synchronized ClientCHK getBlockKey(int blockNum) {
+ public synchronized ClientCHK getBlockKey(int blockNum, ObjectContainer
container) {
+ ClientCHK ret;
if(blockNum < 0) return null;
else if(blockNum < dataKeys.length)
- return dataKeys[blockNum];
+ ret = dataKeys[blockNum];
else if(blockNum < dataKeys.length + checkKeys.length)
- return checkKeys[blockNum - dataKeys.length];
+ ret = checkKeys[blockNum - dataKeys.length];
else return null;
+ if(persistent)
+ container.activate(ret, 5);
+ return ret;
}
- public NodeCHK getBlockNodeKey(int blockNum) {
- ClientCHK key = getBlockKey(blockNum);
+ public NodeCHK getBlockNodeKey(int blockNum, ObjectContainer container)
{
+ ClientCHK key = getBlockKey(blockNum, container);
if(key != null) return key.getNodeCHK();
else return null;
}
Modified:
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
===================================================================
---
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
2008-06-26 18:00:21 UTC (rev 20768)
+++
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
2008-06-26 18:07:37 UTC (rev 20769)
@@ -84,7 +84,7 @@
Logger.minor(this, "Segment is
finishing when getting key "+token+" on "+this);
return null;
}
- ClientKey key =
segment.getBlockKey(((Integer)token).intValue());
+ ClientKey key =
segment.getBlockKey(((Integer)token).intValue(), container);
if(key == null) {
if(segment.isFinished()) {
Logger.error(this, "Segment finished
but didn't tell us! "+this);
@@ -139,7 +139,7 @@
int x;
x = context.random.nextInt(blockNums.size());
ret = (Integer) blockNums.remove(x);
- Key key =
segment.getBlockNodeKey(((Integer)ret).intValue());
+ Key key =
segment.getBlockNodeKey(((Integer)ret).intValue(), container);
if(key == null) {
if(segment.isFinishing() ||
segment.isFinished()) return null;
Logger.error(this, "Key is null for
block "+ret+" for "+this);
@@ -173,7 +173,7 @@
if(blockNums.isEmpty()) return false;
x = context.random.nextInt(blockNums.size());
ret = (Integer) blockNums.get(x);
- Key key =
segment.getBlockNodeKey(((Integer)ret).intValue());
+ Key key =
segment.getBlockNodeKey(((Integer)ret).intValue(), container);
if(key == null) {
Logger.error(this, "Key is null for
block "+ret+" for "+this+" in hasValidKeys()");
blockNums.remove(x);
@@ -425,7 +425,7 @@
if(schedule) schedule(container, context);
else if(!dontSchedule)
// Already scheduled, however this key may not be
registered.
-
getScheduler(context).addPendingKey(segment.getBlockKey(blockNo), this);
+
getScheduler(context).addPendingKey(segment.getBlockKey(blockNo, container),
this);
}
public String toString() {
@@ -462,7 +462,7 @@
for(int i=0;i<blockNums.size();i++) {
Integer token = (Integer) blockNums.get(i);
int num = ((Integer)token).intValue();
- Key k = segment.getBlockNodeKey(num);
+ Key k = segment.getBlockNodeKey(num, container);
if(k != null && k.equals(key)) {
blockNums.remove(i);
break;
@@ -475,7 +475,7 @@
return;
}
Integer token = new Integer(blockNo);
- ClientCHK ckey = (ClientCHK) segment.getBlockKey(blockNo);
+ ClientCHK ckey = (ClientCHK) segment.getBlockKey(blockNo,
container);
ClientCHKBlock cb;
try {
cb = new ClientCHKBlock((CHKBlock)block, ckey);