Author: zothar
Date: 2006-05-29 23:51:29 +0000 (Mon, 29 May 2006)
New Revision: 8943
Modified:
trunk/freenet/src/freenet/node/PeerNode.java
Log:
Refactored use of synchronized to correctly not block PacketSender. Fix the
logged added in r8942 to be useful. This may run a tad better.
Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java 2006-05-29 22:33:58 UTC
(rev 8942)
+++ trunk/freenet/src/freenet/node/PeerNode.java 2006-05-29 23:51:29 UTC
(rev 8943)
@@ -458,8 +458,35 @@
return handshakeIPs;
}
+ private String handshakeIPsToString() {
+ Peer[] localHandshakeIPs;
+ synchronized(this) {
+ localHandshakeIPs = handshakeIPs;
+ }
+ if(localHandshakeIPs == null)
+ return "null";
+ StringBuffer toOutputString = new StringBuffer(1024);
+ boolean needSep = false;
+ toOutputString.append("[ ");
+ for(int i=0;i<localHandshakeIPs.length;i++) {
+ if(needSep)
+ toOutputString.append(", ");
+ if(localHandshakeIPs[i] == null) {
+ toOutputString.append("null");
+ needSep = true;
+ continue;
+ }
+ toOutputString.append("'");
+ // Actually do the DNS request for the member Peer of
localHandshakeIPs
+
toOutputString.append(localHandshakeIPs[i].getHandshakeAddress());
+ toOutputString.append("'");
+ needSep = true;
+ }
+ toOutputString.append(" ]");
+ return toOutputString.toString();
+ }
+
public void maybeUpdateHandshakeIPs() {
- if(handshakeIPs != null) return;
long now = System.currentTimeMillis();
if((now - lastAttemptedHandshakeIPUpdateTime) < 5*60*1000) return; // 5
minutes
lastAttemptedHandshakeIPUpdateTime = now;
@@ -472,21 +499,21 @@
// Don't synchronize while doing lookups which may take a long time!
synchronized(this) {
myNominalPeer = (Peer[]) nominalPeer.toArray(new
Peer[nominalPeer.size()]);
-
- if(myNominalPeer.length == 0) {
- if(detectedPeer == null) {
+ }
+
+ if(myNominalPeer.length == 0) {
+ if(detectedPeer == null) {
+ synchronized(this) {
handshakeIPs = null;
- Logger.normal(this, "1: maybeUpdateHandshakeIPs
got a result of: "+handshakeIPs);
- return;
}
- handshakeIPs = new Peer[] { detectedPeer };
- for(int i=0;i<handshakeIPs.length;i++) {
- // Actually do the DNS request for the member
Peer of handshakeIPs
- handshakeIPs[i].getHandshakeAddress();
- }
- Logger.normal(this, "2: maybeUpdateHandshakeIPs got a
result of: "+handshakeIPs);
+ Logger.normal(this, "1: maybeUpdateHandshakeIPs got a
result of: "+handshakeIPsToString());
return;
}
+ synchronized(this) {
+ handshakeIPs = new Peer[] { detectedPeer };
+ }
+ Logger.normal(this, "2: maybeUpdateHandshakeIPs got a result
of: "+handshakeIPsToString());
+ return;
}
if( detectedPeer != null && ! nominalPeer.contains(detectedPeer)){
@@ -515,12 +542,10 @@
newPeers[p.length] = extra;
p = newPeers;
}
- handshakeIPs = p;
- for(int i=0;i<handshakeIPs.length;i++) {
- // Actually do the DNS request for the member Peer of
handshakeIPs
- handshakeIPs[i].getHandshakeAddress();
+ synchronized(this) {
+ handshakeIPs = p;
}
- Logger.normal(this, "3: maybeUpdateHandshakeIPs got a result of:
"+handshakeIPs);
+ Logger.normal(this, "3: maybeUpdateHandshakeIPs got a result of:
"+handshakeIPsToString());
return;
}
@@ -763,7 +788,9 @@
+
node.random.nextInt(Node.RANDOMIZED_TIME_BETWEEN_HANDSHAKE_SENDS)
+
node.random.nextInt(Node.RANDOMIZED_TIME_BETWEEN_HANDSHAKE_SENDS);
}
- handshakeIPs = null;
+ synchronized(this) {
+ handshakeIPs = null;
+ }
this.handshakeCount++;
// Don't fetch ARKs for peers we have verified (through handshake) to
be incompatible with us
if(handshakeCount == MAX_HANDSHAKE_COUNT &&
!(verifiedIncompatibleOlderVersion || verifiedIncompatibleNewerVersion)) {