Author: toad
Date: 2008-08-29 22:59:57 +0000 (Fri, 29 Aug 2008)
New Revision: 22232

Modified:
   branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
Log:
Activation: don't deactivate buckets if they are already active, because FEC 
needs the buckets to be active.


Modified: 
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java 
2008-08-29 22:57:22 UTC (rev 22231)
+++ branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java 
2008-08-29 22:59:57 UTC (rev 22232)
@@ -224,7 +224,7 @@
                                                // We queue a persistent 
download, we queue a transient.
                                                // The transient goes through 
DatastoreChecker first,
                                                // and feeds the block to us. 
We don't finish, because
-                                               // we need more blocks. Then 
the persistent goes through
+                                               // we need more blocks. Then 
the persistent goes through 
                                                // the DatastoreChecker, and 
calls us again with the same
                                                // block.
                                                if(logMINOR)
@@ -1090,17 +1090,29 @@

        public boolean haveBlock(int blockNo, ObjectContainer container) {
                if(blockNo < dataBuckets.length) {
+                       boolean wasActive = false;
                        if(dataBuckets[blockNo] == null) return false;
-                       if(persistent) container.activate(dataBuckets[blockNo], 
1);
+                       if(persistent) {
+                               wasActive = 
container.ext().isActive(dataBuckets[blockNo]);
+                               if(!wasActive)
+                                       
container.activate(dataBuckets[blockNo], 1);
+                       }
                        boolean retval = dataBuckets[blockNo].hasData();
-                       if(persistent) 
container.deactivate(dataBuckets[blockNo], 1);
+                       if(persistent && !wasActive)
+                               container.deactivate(dataBuckets[blockNo], 1);
                        return retval;
                } else {
+                       boolean wasActive = false;
                        blockNo -= dataBuckets.length;
-                       if(checkBuckets[blockNo] != null) return false;
-                       if(persistent) 
container.activate(checkBuckets[blockNo], 1);
+                       if(checkBuckets[blockNo] == null) return false;
+                       if(persistent) {
+                               wasActive = 
container.ext().isActive(checkBuckets[blockNo]);
+                               if(!wasActive)
+                                       
container.activate(checkBuckets[blockNo], 1);
+                       }
                        boolean retval = checkBuckets[blockNo].hasData();
-                       if(persistent) 
container.deactivate(checkBuckets[blockNo], 1);
+                       if(persistent && !wasActive)
+                               container.deactivate(checkBuckets[blockNo], 1);
                        return retval;
                }
        }


Reply via email to