Author: toad
Date: 2008-07-23 12:30:18 +0000 (Wed, 23 Jul 2008)
New Revision: 21327
Modified:
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
Log:
More activation/deactivation.
Modified:
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
2008-07-23 12:28:39 UTC (rev 21326)
+++ branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
2008-07-23 12:30:18 UTC (rev 21327)
@@ -818,7 +818,7 @@
for(int i=0;i<deadSegs.length;i++) {
if(persistent)
container.activate(deadSegs[i], 1);
- deadSegs[i].kill(container);
+ deadSegs[i].kill(container, true);
}
if(persistent) {
container.set(this);
Modified:
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
===================================================================
---
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
2008-07-23 12:28:39 UTC (rev 21326)
+++
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
2008-07-23 12:30:18 UTC (rev 21327)
@@ -271,8 +271,11 @@
}
segment.onNonFatalFailure(fetchExceptions, blockNumbers, this,
container, context);
- // TODO Auto-generated method stub
-
+ if(persistent) {
+ container.deactivate(segment, 1);
+ container.deactivate(parent, 1);
+ container.deactivate(segment.errors, 1);
+ }
}
// FIXME refactor this out to a common method; see
SimpleSingleFileFetcher
@@ -647,7 +650,7 @@
* Terminate a subsegment. Called by the segment, which will have
already removed the
* subsegment from the list.
*/
- public void kill(ObjectContainer container) {
+ public void kill(ObjectContainer container, boolean dontDeactivateSeg) {
if(persistent) {
container.activate(this, 1);
container.activate(segment, 1);
@@ -661,6 +664,15 @@
blockNums.clear();
cancelled = true;
}
+ if(persistent) {
+ if(!dontDeactivateSeg)
+ container.deactivate(segment, 1);
+ if(container.ext().isStored(this))
+ container.set(this);
+ if(container.ext().isStored(blockNums))
+ container.set(blockNums);
+ container.deactivate(blockNums, 1);
+ }
}
public long getCooldownWakeup(Object token, ObjectContainer container) {
@@ -668,12 +680,12 @@
container.activate(this, 1);
container.activate(segment, 1);
}
- return segment.getCooldownWakeup(((Integer)token).intValue());
+ long ret =
segment.getCooldownWakeup(((Integer)token).intValue());
+ return ret;
}
public void requeueAfterCooldown(Key key, long time, ObjectContainer
container, ClientContext context) {
if(persistent) {
- container.activate(this, 1);
container.activate(segment, 1);
}
if(Logger.shouldLog(Logger.MINOR, this))
@@ -681,14 +693,26 @@
if(!segment.requeueAfterCooldown(key, time, container,
context)) {
Logger.error(this, "Key was not wanted after cooldown:
"+key+" for "+this+" in requeueAfterCooldown");
}
+ if(persistent) {
+ container.deactivate(segment, 1);
+ }
}
public long getCooldownWakeupByKey(Key key, ObjectContainer container) {
+ /* Only deactivate if was deactivated in the first place.
+ * See the removePendingKey() stack trace: Segment is the
listener (getter) ! */
+ boolean activated = false;
if(persistent) {
- container.activate(this, 1);
- container.activate(segment, 1);
+ activated = container.ext().isActive(segment);
+ if(!activated)
+ container.activate(segment, 1);
}
- return segment.getCooldownWakeupByKey(key, container);
+ long ret = segment.getCooldownWakeupByKey(key, container);
+ if(persistent) {
+ if(!activated)
+ container.deactivate(segment, 1);
+ }
+ return ret;
}
public void resetCooldownTimes(ObjectContainer container) {