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