Update of /cvsroot/freenet/freenet/src/freenet
In directory sc8-pr-cvs1:/tmp/cvs-serv1809/src/freenet
Modified Files:
Version.java Core.java PeerHandler.java ConnectionHandler.java
PeerPacketMessage.java OpenConnectionManager.java
Log Message:
6506: Fix the NPE by keeping a default Presentation for stats purposes, don't log FCP
Messages in PH stats
Index: Version.java
===================================================================
RCS file: /cvsroot/freenet/freenet/src/freenet/Version.java,v
retrieving revision 1.502
retrieving revision 1.503
diff -u -w -r1.502 -r1.503
--- Version.java 4 Nov 2003 16:07:26 -0000 1.502
+++ Version.java 4 Nov 2003 16:53:23 -0000 1.503
@@ -20,7 +20,7 @@
public static String protocolVersion = "1.47";
/** The build number of the current revision */
- public static final int buildNumber = 6305;
+ public static final int buildNumber = 6306;
public static final int ignoreBuildsAfter = 6500;
Index: Core.java
===================================================================
RCS file: /cvsroot/freenet/freenet/src/freenet/Core.java,v
retrieving revision 1.51
retrieving revision 1.52
diff -u -w -r1.51 -r1.52
--- Core.java 30 Oct 2003 01:34:01 -0000 1.51
+++ Core.java 4 Nov 2003 16:53:23 -0000 1.52
@@ -404,6 +404,9 @@
//private Thread[] interfaceThreads;
Thread interfaceLoopThread;
+ /** Default FNP Presentation for purposes of stats */
+ static public Presentation defaultPresentation;
+
private Object waitForBegin = new Object();
/**
@@ -416,13 +419,14 @@
*/
public Core(Authentity privateKey, Identity identity,
TransportHandler th, SessionHandler sh,
- PresentationHandler ph) {
+ PresentationHandler ph, Presentation defaultPresentation) {
this.privateKey = privateKey;
this.identity = identity;
this.transports = th;
this.sessions = sh;
this.presentations = ph;
+ this.defaultPresentation = defaultPresentation;
logger.log(this, this.toString() + " (build "+Version.buildNumber+")",
Logger.MINOR);
@@ -613,7 +617,7 @@
public final TrailerWriter sendMessage(Message m, Peer p, long timeout)
throws CommunicationException {
return connections.sendMessage(m, p.getIdentity(), null, timeout,
- PeerHandler.NORMAL);
+ PeerHandler.NORMAL, defaultPresentation);
}
// Digest for signatures
Index: PeerHandler.java
===================================================================
RCS file: /cvsroot/freenet/freenet/src/freenet/PeerHandler.java,v
retrieving revision 1.42
retrieving revision 1.43
diff -u -w -r1.42 -r1.43
--- PeerHandler.java 4 Nov 2003 15:55:02 -0000 1.42
+++ PeerHandler.java 4 Nov 2003 16:53:23 -0000 1.43
@@ -27,6 +27,7 @@
final LinkedList messagesWithTrailers;
public static class MessageAccounter
{
+ private Presentation defaultPresentation;
private Hashtable messagesSentByTypeAndStatus = new Hashtable();
//Maps from String containing message name and status to number of that messagetype
sent (class myInt)
private Hashtable messagesReceivedByTypeAndStatus = new Hashtable();
//Maps from String containing message name and status to number of that messagetype
received (class myInt)
private long messagesSent = 0; //Can be figured out from the hash
table above but kept here as a cache for fast access
@@ -44,6 +45,8 @@
private static class myInt{ int intValue= 0;} //Stupid support
class for mapping to an int
protected void registerMessageSent(PeerPacketMessage m, boolean
success) {
+ if(m.ph.id == null) return; // Presentation would be
incompatible with Message
+ m.resolve(defaultPresentation, true);
registerMessageSent(m.msg,m.getLength(),success);
}
@@ -558,9 +561,11 @@
* don't know yet, but we can reply over currently open conns.
* @param n the Node.
* @param maxPacketSize the maximum length allowable for sending packets.
+ * @param defaultPresentationForStats the default Presentation - purely
+ * for purposes of stats.
*/
public PeerHandler(Identity id, NodeReference ref, Node n,
- int maxPacketSize) {
+ int maxPacketSize, Presentation
defaultPresentationForStats) {
this.id = id;
this.ref = ref;
this.node = n;
@@ -570,6 +575,8 @@
connectionHandlers = new LinkedList();
logDEBUG = Core.logger.shouldLog(Logger.DEBUG,this);
inRT = (id == null || !(node.rt.references(id)));
+ messageAccounter.defaultPresentation =
+ defaultPresentationForStats;
}
public long timeSinceLastMessageSent() {
Index: ConnectionHandler.java
===================================================================
RCS file: /cvsroot/freenet/freenet/src/freenet/ConnectionHandler.java,v
retrieving revision 1.204
retrieving revision 1.205
diff -u -w -r1.204 -r1.205
--- ConnectionHandler.java 31 Oct 2003 19:21:23 -0000 1.204
+++ ConnectionHandler.java 4 Nov 2003 16:53:23 -0000 1.205
@@ -62,7 +62,7 @@
private final OpenConnectionManager ocm;
private Link link;
- private final Presentation p;
+ final Presentation p;
private final Ticker t;
private int meanMessageSize;
@@ -350,7 +350,7 @@
private PeerHandler registerPeerHandler() {
if(identity != null) {
- return Main.node.connections.makePeerHandler(identity, null);
+ return Main.node.connections.makePeerHandler(identity, null,
p);
} else {
if(!(link instanceof PlainLink)) {
Core.logger.log(this, "Link: "+link+
@@ -360,7 +360,7 @@
} else {
// Even when there is only one conn, a PeerHandler
must be created because it is the message queue object
return new PeerHandler(null, null, Main.node,
-
Main.node.getMaxPacketLength());
+
Main.node.getMaxPacketLength(), p);
// Not registered anywhere - it will be GC'd when it
is finished with
}
}
@@ -450,7 +450,7 @@
logDEBUG("Waiting for PeerHandler to finish removing:
"+
peerHandler+": "+e);
peerHandler.waitForRemovedFromOCM();
- peerHandler = ocm.makePeerHandler(identity, null);
+ peerHandler = ocm.makePeerHandler(identity, null, p);
}
}
}
Index: PeerPacketMessage.java
===================================================================
RCS file: /cvsroot/freenet/freenet/src/freenet/PeerPacketMessage.java,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -w -r1.19 -r1.20
--- PeerPacketMessage.java 27 Oct 2003 15:20:03 -0000 1.19
+++ PeerPacketMessage.java 4 Nov 2003 16:53:23 -0000 1.20
@@ -51,20 +51,27 @@
throw new NullPointerException();
}
+ public void resolve(Presentation p) {
+ resolve(p, false);
+ }
+
/** Set the message up to send on a connection using a specific
* Presentation. Also resets message finished. Can be called
* multiple times.
* @param p the presentation to use to transform the message into
* a RawMessage and thence to a byte array. Can be null to clear the
* cached message.
+ * @param onlyIfNeeded if true, don't use the new Presentation if there
+ * is an old one.
*/
- public void resolve(Presentation p) {
+ public void resolve(Presentation p, boolean onlyIfNeeded) {
if (Core.logger.shouldLog(Logger.DEBUG, this)) {
Core.logger.log(this, "resolve(" + p + ") for " + this,
Logger.DEBUG);
}
finished = false;
if (this.p == p)
return;
+ if(onlyIfNeeded && this.p != null) return;
this.p = p;
if (p == null) {
this.p = null;
Index: OpenConnectionManager.java
===================================================================
RCS file: /cvsroot/freenet/freenet/src/freenet/OpenConnectionManager.java,v
retrieving revision 1.161
retrieving revision 1.162
diff -u -w -r1.161 -r1.162
--- OpenConnectionManager.java 4 Nov 2003 15:16:44 -0000 1.161
+++ OpenConnectionManager.java 4 Nov 2003 16:53:23 -0000 1.162
@@ -134,15 +134,17 @@
/**
* Add or update a peerhandler, called by Node.reference.
+ * @param p the default Presentation for stats purposes
*/
- public PeerHandler addPeer(Identity id, NodeReference nr) {
+ public PeerHandler addPeer(Identity id, NodeReference nr,
+ Presentation p) {
synchronized(peerHandlers) {
PeerHandler ph = (PeerHandler)(peerHandlers.get(id));
if(ph != null) {
ph.updateReference(nr);
} else {
ph = new PeerHandler(id, nr, Main.node,
- Main.node.getMaxPacketLength());
+ Main.node.getMaxPacketLength(), p);
peerHandlers.put(id, ph);
}
return ph;
@@ -211,7 +213,8 @@
if(ref == null)
ref = Main.node.rt.getNodeReference(i);
ph = new PeerHandler(i, ref, Main.node,
- Main.node.getMaxPacketLength());
+ Main.node.getMaxPacketLength(),
+ ch.p);
peerHandlers.put(i, ph);
}
}
@@ -222,7 +225,7 @@
} catch (RemovingPeerHandlerException e) {
Core.logger.log(this, "Caught "+e+" setting ph for "+ch,
Logger.MINOR);
- ph = makePeerHandler(i, ch.targetReference());
+ ph = makePeerHandler(i, ch.targetReference(), ch.p);
continue;
}
break;
@@ -263,7 +266,8 @@
ph.updateReference(ref);
}
- public PeerHandler makePeerHandler(Identity i, NodeReference ref) {
+ public PeerHandler makePeerHandler(Identity i, NodeReference ref,
+
Presentation p) {
synchronized(peerHandlers) {
PeerHandler ph = (PeerHandler)(peerHandlers.get(i));
if(ph != null) {
@@ -273,7 +277,7 @@
if(ref == null)
ref = Main.node.rt.getNodeReference(i);
ph = new PeerHandler(i, ref, Main.node,
- Main.node.getMaxPacketLength());
+ Main.node.getMaxPacketLength(), p);
peerHandlers.put(i, ph);
return ph;
}
@@ -613,16 +617,16 @@
}
public TrailerWriter sendMessage(Message m, Identity i, NodeReference ref,
- long timeout, int msgPrio)
+ long timeout, int msgPrio, Presentation p)
throws SendFailedException {
- return makePeerHandler(i, ref).sendMessage(m, timeout, msgPrio);
+ return makePeerHandler(i, ref, p).sendMessage(m, timeout, msgPrio);
}
public void sendMessageAsync(Message m, Identity i, NodeReference ref,
MessageSendCallback cb, long timeout,
- int msgPrio)
+ int msgPrio, Presentation p)
throws SendFailedException {
- makePeerHandler(i, ref).sendMessageAsync(m, cb, timeout,
+ makePeerHandler(i, ref, p).sendMessageAsync(m, cb, timeout,
msgPrio);
}
_______________________________________________
cvs mailing list
[EMAIL PROTECTED]
http://dodo.freenetproject.org/cgi-bin/mailman/listinfo/cvs