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


Reply via email to