Author: toad
Date: 2009-01-24 15:07:21 +0000 (Sat, 24 Jan 2009)
New Revision: 25266
Modified:
branches/db4o/freenet/src/freenet/support/io/SegmentedBucketChainBucket.java
branches/db4o/freenet/src/freenet/support/io/SegmentedBucketChainBucketKillJob.java
branches/db4o/freenet/src/freenet/support/io/SegmentedChainBucketSegment.java
Log:
Fix activation bugs causing stored segments not to be freed on startup ->
bucket leak (big bucket leak in some cases)
Modified:
branches/db4o/freenet/src/freenet/support/io/SegmentedBucketChainBucket.java
===================================================================
---
branches/db4o/freenet/src/freenet/support/io/SegmentedBucketChainBucket.java
2009-01-24 15:01:08 UTC (rev 25265)
+++
branches/db4o/freenet/src/freenet/support/io/SegmentedBucketChainBucket.java
2009-01-24 15:07:21 UTC (rev 25266)
@@ -292,6 +292,8 @@
private transient boolean runningSegStore;
protected SegmentedChainBucketSegment makeSegment(int index, final
SegmentedChainBucketSegment oldSeg) {
+ if(Logger.shouldLog(Logger.MINOR, this))
+ Logger.minor(this, "Make a segment for "+this+" index
"+index+ "old "+oldSeg);
if(oldSeg != null) {
synchronized(this) {
while(runningSegStore) {
@@ -419,12 +421,18 @@
}
synchronized void removeContents(ObjectContainer container) {
+ boolean logMINOR = Logger.shouldLog(Logger.MINOR, this);
for(SegmentedChainBucketSegment seg : segments) {
+ if(logMINOR) Logger.minor(this, "Removing segment
"+seg);
+ container.activate(seg, 1);
+ seg.activateBuckets(container);
seg.free();
seg.removeFrom(container);
}
+ if(logMINOR) Logger.minor(this, "Removed segments for "+this);
container.delete(segments);
container.delete(this);
+ if(logMINOR) Logger.minor(this, "Removed "+this);
freed = true; // Just in case it wasn't already.
}
Modified:
branches/db4o/freenet/src/freenet/support/io/SegmentedBucketChainBucketKillJob.java
===================================================================
---
branches/db4o/freenet/src/freenet/support/io/SegmentedBucketChainBucketKillJob.java
2009-01-24 15:01:08 UTC (rev 25265)
+++
branches/db4o/freenet/src/freenet/support/io/SegmentedBucketChainBucketKillJob.java
2009-01-24 15:07:21 UTC (rev 25266)
@@ -4,6 +4,7 @@
import freenet.client.async.ClientContext;
import freenet.client.async.DBJob;
+import freenet.support.Logger;
public class SegmentedBucketChainBucketKillJob implements DBJob {
@@ -14,8 +15,9 @@
}
public void run(ObjectContainer container, ClientContext context) {
- container.activate(bcb, 1);
+ container.activate(bcb, 2);
System.err.println("Freeing unfinished unstored bucket "+this);
+ Logger.error(this, "Freeing unfinished unstored bucket "+this);
bcb.removeContents(container);
}
Modified:
branches/db4o/freenet/src/freenet/support/io/SegmentedChainBucketSegment.java
===================================================================
---
branches/db4o/freenet/src/freenet/support/io/SegmentedChainBucketSegment.java
2009-01-24 15:01:08 UTC (rev 25265)
+++
branches/db4o/freenet/src/freenet/support/io/SegmentedChainBucketSegment.java
2009-01-24 15:07:21 UTC (rev 25266)
@@ -7,6 +7,7 @@
import com.db4o.ObjectContainer;
import freenet.client.async.ClientContext;
+import freenet.support.Logger;
import freenet.support.api.Bucket;
public class SegmentedChainBucketSegment {
@@ -25,6 +26,8 @@
}
public void storeTo(ObjectContainer container) {
+ if(Logger.shouldLog(Logger.MINOR, this))
+ Logger.minor(this, "Storing segment "+this);
for(Bucket bucket : buckets)
bucket.storeTo(container);
container.ext().store(buckets, 1);
_______________________________________________
cvs mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs