Author: toad
Date: 2009-01-29 17:39:53 +0000 (Thu, 29 Jan 2009)
New Revision: 25372
Modified:
branches/db4o/freenet/src/freenet/support/io/SegmentedBucketChainBucket.java
Log:
Remove from start not end, bugfixes.
Modified:
branches/db4o/freenet/src/freenet/support/io/SegmentedBucketChainBucket.java
===================================================================
---
branches/db4o/freenet/src/freenet/support/io/SegmentedBucketChainBucket.java
2009-01-29 17:36:06 UTC (rev 25371)
+++
branches/db4o/freenet/src/freenet/support/io/SegmentedBucketChainBucket.java
2009-01-29 17:39:53 UTC (rev 25372)
@@ -435,15 +435,25 @@
*/
synchronized boolean removeContents(ObjectContainer container) {
boolean logMINOR = Logger.shouldLog(Logger.MINOR, this);
- if(segments.size() > 0) {
+ while(segments.size() > 0) {
Logger.normal(this, "Freeing unfinished unstored bucket
"+this+" segments left "+segments.size());
- SegmentedChainBucketSegment seg =
segments.remove(segments.size() - 1);
+ // Remove the first so the space is reused at the
beginning not at the end.
+ // Removing from the end results in not shrinking.
+ SegmentedChainBucketSegment seg = segments.remove(0);
+ if(seg == null) {
+ // Already removed.
+ continue;
+ }
if(logMINOR) Logger.minor(this, "Removing segment
"+seg);
container.activate(seg, 1);
seg.activateBuckets(container);
seg.free();
seg.removeFrom(container);
- if(segments.size() > 0) return true; // Do some more in
the next transaction
+ if(segments.size() > 0) {
+ container.store(segments);
+ container.store(this);
+ return true; // Do some more in the next
transaction
+ } else break;
}
if(logMINOR) Logger.minor(this, "Removed segments for "+this);
container.delete(segments);
_______________________________________________
cvs mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs