Author: toad
Date: 2008-06-26 23:36:47 +0000 (Thu, 26 Jun 2008)
New Revision: 20803
Modified:
branches/db4o/freenet/src/freenet/clients/http/QueueToadlet.java
branches/db4o/freenet/src/freenet/node/fcp/ClientGet.java
branches/db4o/freenet/src/freenet/node/fcp/ClientPutBase.java
branches/db4o/freenet/src/freenet/node/fcp/ClientRequest.java
branches/db4o/freenet/src/freenet/node/fcp/FCPServer.java
Log:
Prevent activation-related NPEs in rendering queue page
Modified: branches/db4o/freenet/src/freenet/clients/http/QueueToadlet.java
===================================================================
--- branches/db4o/freenet/src/freenet/clients/http/QueueToadlet.java
2008-06-26 23:27:56 UTC (rev 20802)
+++ branches/db4o/freenet/src/freenet/clients/http/QueueToadlet.java
2008-06-26 23:36:47 UTC (rev 20803)
@@ -1041,7 +1041,7 @@
}
} else if (column == LIST_SIZE) {
if (clientRequest instanceof ClientGet)
{
-
requestRow.addChild(createSizeCell(((ClientGet) clientRequest).getDataSize(),
((ClientGet) clientRequest).isTotalFinalized(), advancedModeEnabled));
+
requestRow.addChild(createSizeCell(((ClientGet)
clientRequest).getDataSize(container), ((ClientGet)
clientRequest).isTotalFinalized(container), advancedModeEnabled));
} else if (clientRequest instanceof
ClientPut) {
requestRow.addChild(createSizeCell(((ClientPut) clientRequest).getDataSize(),
true, advancedModeEnabled));
}
@@ -1049,7 +1049,7 @@
requestRow.addChild(createDownloadCell(pageMaker, (ClientGet) clientRequest));
} else if (column == LIST_MIME_TYPE) {
if (clientRequest instanceof ClientGet)
{
-
requestRow.addChild(createTypeCell(((ClientGet) clientRequest).getMIMEType()));
+
requestRow.addChild(createTypeCell(((ClientGet)
clientRequest).getMIMEType(container)));
} else if (clientRequest instanceof
ClientPut) {
requestRow.addChild(createTypeCell(((ClientPut) clientRequest).getMIMEType()));
}
@@ -1076,9 +1076,9 @@
} else if (column == LIST_TOTAL_SIZE) {
requestRow.addChild(createSizeCell(((ClientPutDir)
clientRequest).getTotalDataSize(), true, advancedModeEnabled));
} else if (column == LIST_PROGRESS) {
-
requestRow.addChild(createProgressCell(clientRequest.isStarted(), (int)
clientRequest.getFetchedBlocks(container), (int)
clientRequest.getFailedBlocks(container), (int)
clientRequest.getFatalyFailedBlocks(container), (int)
clientRequest.getMinBlocks(container), (int)
clientRequest.getTotalBlocks(container), clientRequest.isTotalFinalized() ||
clientRequest instanceof ClientPut, isUpload));
+
requestRow.addChild(createProgressCell(clientRequest.isStarted(), (int)
clientRequest.getFetchedBlocks(container), (int)
clientRequest.getFailedBlocks(container), (int)
clientRequest.getFatalyFailedBlocks(container), (int)
clientRequest.getMinBlocks(container), (int)
clientRequest.getTotalBlocks(container),
clientRequest.isTotalFinalized(container) || clientRequest instanceof
ClientPut, isUpload));
} else if (column == LIST_REASON) {
-
requestRow.addChild(createReasonCell(clientRequest.getFailureReason()));
+
requestRow.addChild(createReasonCell(clientRequest.getFailureReason(container)));
}
}
}
@@ -1242,7 +1242,7 @@
FreenetURI uri = ((ClientGet)req).getURI();
if(req.isPersistentForever() && uri != null)
container.activate(uri, 5);
- long size = ((ClientGet)req).getDataSize();
+ long size = ((ClientGet)req).getDataSize(container);
String name = uri.getPreferredFilename();
String title = l10n("downloadSucceededTitle",
"filename", name);
HTMLNode text = new HTMLNode("div");
Modified: branches/db4o/freenet/src/freenet/node/fcp/ClientGet.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/fcp/ClientGet.java 2008-06-26
23:27:56 UTC (rev 20802)
+++ branches/db4o/freenet/src/freenet/node/fcp/ClientGet.java 2008-06-26
23:36:47 UTC (rev 20803)
@@ -679,19 +679,25 @@
return uri;
}
- public long getDataSize() {
+ public long getDataSize(ObjectContainer container) {
if(foundDataLength > 0)
return foundDataLength;
- if(getter != null)
+ if(getter != null) {
+ if(persistenceType == PERSIST_FOREVER)
+ container.activate(getter, 1);
return getter.expectedSize();
+ }
return -1;
}
- public String getMIMEType() {
+ public String getMIMEType(ObjectContainer container) {
if(foundDataMimeType != null)
return foundDataMimeType;
- if(getter != null)
+ if(getter != null) {
+ if(persistenceType == PERSIST_FOREVER)
+ container.activate(getter, 1);
return getter.expectedMIME();
+ }
return null;
}
@@ -753,9 +759,11 @@
return 0;
}
- public String getFailureReason() {
+ public String getFailureReason(ObjectContainer container) {
if(getFailedMessage == null)
return null;
+ if(persistenceType == PERSIST_FOREVER)
+ container.activate(getFailedMessage, 5);
String s = getFailedMessage.shortCodeDescription;
if(getFailedMessage.extraDescription != null)
s += ": "+getFailedMessage.extraDescription;
@@ -763,10 +771,14 @@
}
- public boolean isTotalFinalized() {
+ public boolean isTotalFinalized(ObjectContainer container) {
if(finished && succeeded) return true;
if(progressPending == null) return false;
- else return progressPending.isTotalFinalized();
+ else {
+ if(persistenceType == PERSIST_FOREVER)
+ container.activate(progressPending, 1);
+ return progressPending.isTotalFinalized();
+ }
}
/**
Modified: branches/db4o/freenet/src/freenet/node/fcp/ClientPutBase.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/fcp/ClientPutBase.java
2008-06-26 23:27:56 UTC (rev 20802)
+++ branches/db4o/freenet/src/freenet/node/fcp/ClientPutBase.java
2008-06-26 23:36:47 UTC (rev 20803)
@@ -447,14 +447,20 @@
return -1;
}
- public synchronized boolean isTotalFinalized() {
+ public synchronized boolean isTotalFinalized(ObjectContainer container)
{
if(!(progressMessage instanceof SimpleProgressMessage)) return
false;
- else return
((SimpleProgressMessage)progressMessage).isTotalFinalized();
+ else {
+ if(persistenceType == PERSIST_FOREVER)
+ container.activate(putFailedMessage, 5);
+ return
((SimpleProgressMessage)progressMessage).isTotalFinalized();
+ }
}
- public synchronized String getFailureReason() {
+ public synchronized String getFailureReason(ObjectContainer container) {
if(putFailedMessage == null)
return null;
+ if(persistenceType == PERSIST_FOREVER)
+ container.activate(putFailedMessage, 5);
String s = putFailedMessage.shortCodeDescription;
if(putFailedMessage.extraDescription != null)
s += ": "+putFailedMessage.extraDescription;
Modified: branches/db4o/freenet/src/freenet/node/fcp/ClientRequest.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/fcp/ClientRequest.java
2008-06-26 23:27:56 UTC (rev 20802)
+++ branches/db4o/freenet/src/freenet/node/fcp/ClientRequest.java
2008-06-26 23:36:47 UTC (rev 20803)
@@ -287,12 +287,12 @@
public abstract double getFailedBlocks(ObjectContainer container);
public abstract double getFatalyFailedBlocks(ObjectContainer container);
- public abstract String getFailureReason();
+ public abstract String getFailureReason(ObjectContainer container);
/**
* Has the total number of blocks to insert been determined yet?
*/
- public abstract boolean isTotalFinalized();
+ public abstract boolean isTotalFinalized(ObjectContainer container);
public void onMajorProgress() {
// Ignore
Modified: branches/db4o/freenet/src/freenet/node/fcp/FCPServer.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/fcp/FCPServer.java 2008-06-26
23:27:56 UTC (rev 20802)
+++ branches/db4o/freenet/src/freenet/node/fcp/FCPServer.java 2008-06-26
23:36:47 UTC (rev 20803)
@@ -983,7 +983,7 @@
ClientGet get = globalRebootClient.getCompletedRequest(key,
null);
if(get != null) {
// FIXME race condition with free() - arrange
refcounting for the data to prevent this
- return new FetchResult(new
ClientMetadata(get.getMIMEType()), get.getBucket());
+ return new FetchResult(new
ClientMetadata(get.getMIMEType(null)), get.getBucket());
}
class OutputWrapper {
@@ -1000,7 +1000,7 @@
try {
ClientGet get =
globalForeverClient.getCompletedRequest(key, container);
if(get != null) {
- result = new FetchResult(new
ClientMetadata(get.getMIMEType()), get.getBucket());
+ result = new FetchResult(new
ClientMetadata(get.getMIMEType(container)), get.getBucket());
}
} finally {
synchronized(ow) {