Author: toad
Date: 2008-12-17 22:57:08 +0000 (Wed, 17 Dec 2008)
New Revision: 24489
Modified:
branches/db4o/freenet/src/freenet/client/FetchContext.java
branches/db4o/freenet/src/freenet/client/async/ClientGetState.java
branches/db4o/freenet/src/freenet/client/async/ClientGetter.java
branches/db4o/freenet/src/freenet/client/async/SimpleSingleFileFetcher.java
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcher.java
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
branches/db4o/freenet/src/freenet/client/async/USKFetcher.java
branches/db4o/freenet/src/freenet/client/async/USKFetcherTag.java
Log:
removeFrom(). Implement in some places.
Modified: branches/db4o/freenet/src/freenet/client/FetchContext.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/FetchContext.java 2008-12-17
22:50:30 UTC (rev 24488)
+++ branches/db4o/freenet/src/freenet/client/FetchContext.java 2008-12-17
22:57:08 UTC (rev 24489)
@@ -5,6 +5,8 @@
import java.util.Set;
+import com.db4o.ObjectContainer;
+
import freenet.client.async.BlockSet;
import freenet.client.async.USKManager;
import freenet.client.events.ClientEventProducer;
@@ -44,6 +46,7 @@
/** If set, contains a set of blocks to be consulted before checking
the datastore. */
public BlockSet blocks;
public Set allowedMIMETypes;
+ private final boolean hasOwnEventProducer;
public FetchContext(long curMaxLength,
long curMaxTempLength, int maxMetadataSize, int
maxRecursionLevel, int maxArchiveRestarts, int maxArchiveLevels,
@@ -72,6 +75,7 @@
this.maxCheckBlocksPerSegment = maxCheckBlocksPerSegment;
this.cacheLocalRequests = cacheLocalRequests;
this.ignoreTooManyPathComponents = ignoreTooManyPathComponents;
+ hasOwnEventProducer = true;
}
public FetchContext(FetchContext ctx, int maskID, boolean keepProducer)
{
@@ -79,6 +83,7 @@
this.eventProducer = ctx.eventProducer;
else
this.eventProducer = new SimpleEventProducer();
+ hasOwnEventProducer = !keepProducer;
this.ignoreTooManyPathComponents =
ctx.ignoreTooManyPathComponents;
this.blocks = ctx.blocks;
this.allowedMIMETypes = ctx.allowedMIMETypes;
@@ -168,5 +173,10 @@
throw new Error(e);
}
}
+
+ public void removeFrom(ObjectContainer container) {
+ if(hasOwnEventProducer) eventProducer.removeFrom(container);
+ container.delete(this);
+ }
}
Modified: branches/db4o/freenet/src/freenet/client/async/ClientGetState.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/ClientGetState.java
2008-12-17 22:50:30 UTC (rev 24488)
+++ branches/db4o/freenet/src/freenet/client/async/ClientGetState.java
2008-12-17 22:57:08 UTC (rev 24489)
@@ -16,4 +16,11 @@
public void cancel(ObjectContainer container, ClientContext context);
public long getToken();
+
+ /**
+ * Once the callback has finished with this fetch, it will call
removeFrom() to instruct the fetch
+ * to remove itself and all its subsidiary objects from the database.
+ * @param container
+ */
+ public void removeFrom(ObjectContainer container, ClientContext
context);
}
Modified: branches/db4o/freenet/src/freenet/client/async/ClientGetter.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/ClientGetter.java
2008-12-17 22:50:30 UTC (rev 24488)
+++ branches/db4o/freenet/src/freenet/client/async/ClientGetter.java
2008-12-17 22:57:08 UTC (rev 24489)
@@ -171,6 +171,7 @@
if(returnBucket != null &&
Logger.shouldLog(Logger.MINOR, this))
Logger.minor(this, "client.async returned data
in returnBucket");
}
+ state.removeFrom(container, context);
FetchResult res = result;
if(persistent()) {
container.store(this);
@@ -183,6 +184,7 @@
if(Logger.shouldLog(Logger.MINOR, this))
Logger.minor(this, "Failed from "+state+" : "+e+" on
"+this, e);
closeBinaryBlobStream(container, context);
+ state.removeFrom(container, context);
while(true) {
if(e.mode == FetchException.ARCHIVE_RESTART) {
int ar;
Modified:
branches/db4o/freenet/src/freenet/client/async/SimpleSingleFileFetcher.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SimpleSingleFileFetcher.java
2008-12-17 22:50:30 UTC (rev 24488)
+++ branches/db4o/freenet/src/freenet/client/async/SimpleSingleFileFetcher.java
2008-12-17 22:57:08 UTC (rev 24489)
@@ -177,4 +177,9 @@
onFailure(e.getFetchException(), false, container, context);
}
+ public void removeFrom(ObjectContainer container, ClientContext
context) {
+ // TODO Auto-generated method stub
+
+ }
+
}
Modified: branches/db4o/freenet/src/freenet/client/async/SplitFileFetcher.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SplitFileFetcher.java
2008-12-17 22:50:30 UTC (rev 24488)
+++ branches/db4o/freenet/src/freenet/client/async/SplitFileFetcher.java
2008-12-17 22:57:08 UTC (rev 24489)
@@ -443,7 +443,9 @@
boolean cbWasActive = true;
try {
synchronized(this) {
- if(otherFailure != null) throw otherFailure;
+ if(otherFailure != null) {
+ throw otherFailure;
+ }
if(finished) {
Logger.error(this, "Was already
finished");
return;
@@ -637,4 +639,14 @@
cancel(container, context);
}
+ public void removeFrom(ObjectContainer container, ClientContext
context) {
+ blockFetchContext.removeFrom(container);
+ for(int i=0;i<segments.length;i++) {
+ SplitFileFetcherSegment segment = segments[i];
+ segments[i] = null;
+ segment.removeFrom(container, context);
+ }
+ container.delete(this);
+ }
+
}
Modified:
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
2008-12-17 22:50:30 UTC (rev 24488)
+++ branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
2008-12-17 22:57:08 UTC (rev 24489)
@@ -1435,4 +1435,35 @@
if(persistent)
container.store(this);
}
+
+ public void removeFrom(ObjectContainer container, ClientContext
context) {
+ freeDecodedData(container);
+ removeSubSegments(container, context);
+ for(int i=0;i<dataKeys.length;i++) {
+ if(dataKeys[i] != null)
dataKeys[i].removeFrom(container);
+ dataKeys[i] = null;
+ }
+ for(int i=0;i<checkKeys.length;i++) {
+ if(checkKeys[i] != null)
checkKeys[i].removeFrom(container);
+ checkKeys[i] = null;
+ }
+ for(int i=0;i<dataBuckets.length;i++) {
+ MinimalSplitfileBlock block = dataBuckets[i];
+ if(block.data != null) {
+ Logger.error(this, "Data block "+i+" still
present in removeFrom()! on "+this);
+ block.data.free();
+ }
+ block.removeFrom(container);
+ }
+ for(int i=0;i<checkBuckets.length;i++) {
+ MinimalSplitfileBlock block = checkBuckets[i];
+ if(block.data != null) {
+ Logger.error(this, "Check block "+i+" still
present in removeFrom()! on "+this);
+ block.data.free();
+ }
+ block.removeFrom(container);
+ }
+ errors.removeFrom(container);
+ container.delete(this);
+ }
}
Modified: branches/db4o/freenet/src/freenet/client/async/USKFetcher.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/USKFetcher.java
2008-12-17 22:50:30 UTC (rev 24488)
+++ branches/db4o/freenet/src/freenet/client/async/USKFetcher.java
2008-12-17 22:57:08 UTC (rev 24489)
@@ -607,5 +607,9 @@
public long getToken() {
return -1;
}
+
+ public void removeFrom(ObjectContainer container, ClientContext
context) {
+ throw new UnsupportedOperationException();
+ }
}
Modified: branches/db4o/freenet/src/freenet/client/async/USKFetcherTag.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/USKFetcherTag.java
2008-12-17 22:50:30 UTC (rev 24488)
+++ branches/db4o/freenet/src/freenet/client/async/USKFetcherTag.java
2008-12-17 22:57:08 UTC (rev 24489)
@@ -201,5 +201,9 @@
public final boolean isFinished() {
return finished;
}
+
+ public void removeFrom(ObjectContainer container, ClientContext
context) {
+ container.delete(this);
+ }
}
_______________________________________________
cvs mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs