Author: toad
Date: 2008-09-19 14:38:30 +0000 (Fri, 19 Sep 2008)
New Revision: 22702
Modified:
trunk/freenet/src/freenet/node/FNPPacketMangler.java
trunk/freenet/src/freenet/node/MessageItem.java
trunk/freenet/src/freenet/node/PeerNode.java
Log:
We always resolve the MessageItem very soon after creation anyway, so it
doesn't save any memory to do it lazily.
It's simpler to resolve it on creation.
Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java
===================================================================
--- trunk/freenet/src/freenet/node/FNPPacketMangler.java 2008-09-19
14:32:12 UTC (rev 22701)
+++ trunk/freenet/src/freenet/node/FNPPacketMangler.java 2008-09-19
14:38:30 UTC (rev 22702)
@@ -2022,11 +2022,11 @@
for(int i=0;i<messageData.length;i++) {
MessageItem mi = messages[i];
if(logMINOR) Logger.minor(this, "Handling
"+(mi.formatted ? "formatted " : "") +
- "MessageItem "+mi+" :
"+mi.getData(pn).length);
+ "MessageItem "+mi+" : "+mi.getLength());
mi_name = (mi.msg == null ? "(not a Message)" :
mi.msg.getSpec().getName());
if(mi.formatted) {
try {
- byte[] buf = mi.getData(pn);
+ byte[] buf = mi.getData();
int packetNumber =
kt.allocateOutgoingPacketNumberNeverBlock();
int size =
processOutgoingPreformatted(buf, 0, buf.length, kt, packetNumber, mi.cb,
mi.alreadyReportedBytes, mi.getPriority());
//MARK: onSent()
@@ -2065,7 +2065,7 @@
return;
}
} else {
- byte[] data = mi.getData(pn);
+ byte[] data = mi.getData();
messageData[x] = data;
if(data.length > sock.getMaxPacketSize()) {
Logger.error(this, "Message exceeds
packet size: "+messages[i]+" size "+data.length+" message "+mi.msg);
Modified: trunk/freenet/src/freenet/node/MessageItem.java
===================================================================
--- trunk/freenet/src/freenet/node/MessageItem.java 2008-09-19 14:32:12 UTC
(rev 22701)
+++ trunk/freenet/src/freenet/node/MessageItem.java 2008-09-19 14:38:30 UTC
(rev 22702)
@@ -8,11 +8,13 @@
import freenet.io.comm.Message;
import freenet.support.Logger;
-/** A queued Message or byte[], and a callback, which may be null. */
+/** A queued byte[], maybe including a Message, and a callback, which may be
null.
+ * Note that we always create the byte[] on construction, as almost everywhere
+ * which uses a MessageItem needs to know its length immediately. */
public class MessageItem {
final Message msg;
- byte[] buf;
+ final byte[] buf;
final AsyncMessageCallback[] cb;
final long submitted;
final int alreadyReportedBytes;
@@ -23,15 +25,18 @@
final ByteCounter ctrCallback;
private final short priority;
- public MessageItem(Message msg2, AsyncMessageCallback[] cb2, int
alreadyReportedBytes, ByteCounter ctr) {
+ public MessageItem(Message msg2, AsyncMessageCallback[] cb2, int
alreadyReportedBytes, ByteCounter ctr, PeerNode pn) {
this.alreadyReportedBytes = alreadyReportedBytes;
this.msg = msg2;
this.cb = cb2;
- buf = null;
formatted = false;
this.ctrCallback = ctr;
this.submitted = System.currentTimeMillis();
priority = msg2.getSpec().getPriority();
+ buf = msg.encodeToPacket(pn);
+ if(buf.length <= alreadyReportedBytes) {
+ Logger.error(this, "buf.length = "+buf.length+" but
alreadyReportedBytes = "+alreadyReportedBytes+" on "+this);
+ }
}
public MessageItem(byte[] data, AsyncMessageCallback[] cb2, boolean
formatted, int alreadyReportedBytes, ByteCounter ctr, short priority) {
@@ -50,14 +55,13 @@
/**
* Return the data contents of this MessageItem.
*/
- public byte[] getData(PeerNode pn) {
- if(buf == null)
- buf = msg.encodeToPacket(pn);
- if(buf.length <= alreadyReportedBytes) {
- Logger.error(this, "buf.length = "+buf.length+" but
alreadyReportedBytes = "+alreadyReportedBytes+" on "+this);
- }
+ public byte[] getData() {
return buf;
}
+
+ public int getLength() {
+ return buf.length;
+ }
/**
* @param length The actual number of bytes sent to send this message,
including our share of the packet overheads,
Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java 2008-09-19 14:32:12 UTC
(rev 22701)
+++ trunk/freenet/src/freenet/node/PeerNode.java 2008-09-19 14:38:30 UTC
(rev 22702)
@@ -1029,8 +1029,7 @@
if(!isConnected())
throw new NotConnectedException();
addToLocalNodeSentMessagesToStatistic(msg);
- MessageItem item = new MessageItem(msg, cb == null ? null : new
AsyncMessageCallback[]{cb}, alreadyReportedBytes, ctr);
- item.getData(this);
+ MessageItem item = new MessageItem(msg, cb == null ? null : new
AsyncMessageCallback[]{cb}, alreadyReportedBytes, ctr, this);
long now = System.currentTimeMillis();
reportBackoffStatus(now);
int x = 0;
@@ -1039,7 +1038,7 @@
Iterator i = messagesToSendNow.iterator();
for(; i.hasNext();) {
MessageItem it = (MessageItem) (i.next());
- x += it.getData(this).length + 2;
+ x += it.getLength() + 2;
if(x > 1024)
break;
}
@@ -1059,7 +1058,7 @@
Iterator i = messagesToSendNow.iterator();
for(; i.hasNext();) {
MessageItem it = (MessageItem) (i.next());
- x += it.getData(this).length + 2;
+ x += it.getLength() + 2;
}
}
return x;
@@ -4164,7 +4163,7 @@
for(int j = 0; j < messages.length; j++) {
if(l > messages[j].submitted)
l = messages[j].submitted;
- sz += 2 + /* FIXME only 2? */
messages[j].getData(this).length;
+ sz += 2 + /* FIXME only 2? */
messages[j].getLength();
}
if(node.enablePacketCoalescing && (l +
PacketSender.MAX_COALESCING_DELAY > now) &&
(sz < ((PacketSocketHandler)
getSocketHandler()).getPacketSendThreshold())) {
@@ -4197,7 +4196,7 @@
// Force packet to have a sequence number.
Message m = DMT.createFNPVoid();
addToLocalNodeSentMessagesToStatistic(m);
- getOutgoingMangler().processOutgoingOrRequeue(new
MessageItem[]{new MessageItem(m, null, 0, null)}, this, true, true);
+ getOutgoingMangler().processOutgoingOrRequeue(new
MessageItem[]{new MessageItem(m, null, 0, null, this)}, this, true, true);
}
}
}