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;
        }

 }


Reply via email to