Author: toad
Date: 2008-07-21 13:55:57 +0000 (Mon, 21 Jul 2008)
New Revision: 21281
Modified:
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
Log:
Check that the block is only in blockNums on the subsegment it is supposed to
be on.
Modified:
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
2008-07-21 13:49:40 UTC (rev 21280)
+++ branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
2008-07-21 13:55:57 UTC (rev 21281)
@@ -1064,6 +1064,16 @@
seg.removeBlockNum(blockNum, container);
seg.possiblyRemoveFromParent(container);
}
+ for(int i=0;i<subSegments.size();i++) {
+ SplitFileFetcherSubSegment checkSeg =
(SplitFileFetcherSubSegment) subSegments.get(i);
+ if(checkSeg == seg) continue;
+ if(persistent)
+ container.activate(checkSeg, 1);
+ if(checkSeg.removeBlockNum(blockNum, container))
+ Logger.error(this, "Block number "+blockNum+"
was registered to wrong subsegment "+checkSeg+" should be "+seg);
+ if(persistent)
+ container.deactivate(checkSeg, 1);
+ }
if(persistent)
container.deactivate(seg, 1);
try {
Modified:
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
===================================================================
---
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
2008-07-21 13:49:40 UTC (rev 21280)
+++
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
2008-07-21 13:55:57 UTC (rev 21281)
@@ -653,10 +653,11 @@
getScheduler(context).register(firstTime ? segment : null, new
SendableGet[] { this }, regmeOnly, persistent, true,
segment.blockFetchContext.blocks, null);
}
- public void removeBlockNum(int blockNum, ObjectContainer container) {
+ public boolean removeBlockNum(int blockNum, ObjectContainer container) {
if(logMINOR) Logger.minor(this, "Removing block "+blockNum+"
from "+this);
if(persistent)
container.activate(blockNums, 2);
+ boolean found = false;
synchronized(segment) {
for(int i=0;i<blockNums.size();i++) {
Integer token = (Integer) blockNums.get(i);
@@ -664,6 +665,7 @@
if(num == blockNum) {
blockNums.remove(i);
if(logMINOR) Logger.minor(this,
"Removed block "+blockNum+" from "+this);
+ found = true;
break;
}
}
@@ -672,6 +674,7 @@
container.set(blockNums);
container.deactivate(blockNums, 2);
}
+ return found;
}
}