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

Reply via email to