Author: toad
Date: 2007-09-26 09:55:30 +0000 (Wed, 26 Sep 2007)
New Revision: 15312
Modified:
trunk/freenet/src/freenet/node/OpennetManager.java
trunk/freenet/src/freenet/node/PeerManager.java
trunk/freenet/src/freenet/node/PeerNode.java
Log:
reactivate nodes in DISCONNECTING when re-adding them (possibly from
old-opennet-peers).
also always use addPeer(,true..) in wantPeer to avoid possible infinite looping
Modified: trunk/freenet/src/freenet/node/OpennetManager.java
===================================================================
--- trunk/freenet/src/freenet/node/OpennetManager.java 2007-09-26 09:48:42 UTC
(rev 15311)
+++ trunk/freenet/src/freenet/node/OpennetManager.java 2007-09-26 09:55:30 UTC
(rev 15312)
@@ -266,7 +266,7 @@
}
if(notMany) {
if(nodeToAddNow != null)
- node.peers.addPeer(nodeToAddNow, true); // Add
to peers outside the OM lock
+ node.peers.addPeer(nodeToAddNow, true, true);
// Add to peers outside the OM lock
return true;
}
boolean canAdd = true;
@@ -321,7 +321,7 @@
}
}
}
- if(nodeToAddNow != null && !node.peers.addPeer(nodeToAddNow)) {
+ if(nodeToAddNow != null && !node.peers.addPeer(nodeToAddNow,
true, true)) {
if(logMINOR)
Logger.minor(this, "Already in global peers
list: "+nodeToAddNow+" when adding opennet node");
// Just because it's in the global peers list doesn't
mean its in the LRU, it may be an old-opennet-peers reconnection.
Modified: trunk/freenet/src/freenet/node/PeerManager.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerManager.java 2007-09-26 09:48:42 UTC
(rev 15311)
+++ trunk/freenet/src/freenet/node/PeerManager.java 2007-09-26 09:55:30 UTC
(rev 15312)
@@ -204,7 +204,7 @@
if(oldOpennetPeers)
opennet.addOldOpennetNode(pn);
else
- addPeer(pn, true);
+ addPeer(pn, true, false);
gotSome = true;
}
} catch (EOFException e) {
@@ -221,7 +221,7 @@
}
public boolean addPeer(PeerNode pn) {
- return addPeer(pn, false);
+ return addPeer(pn, false, false);
}
/**
@@ -229,11 +229,13 @@
* @param pn The node to add to the routing table.
* @param ignoreOpennet If true, don't check for opennet peers. If
false, check for opennet peers and if so,
* if opennet is enabled auto-add them to the opennet LRU, otherwise
fail.
+ * @param reactivate If true, re-enable the peer if it is in state
DISCONNECTING before re-adding it.
* @return True if the node was successfully added. False if it was
already present, or if we tried to add
* an opennet peer when opennet was disabled.
*/
- boolean addPeer(PeerNode pn, boolean ignoreOpennet) {
+ boolean addPeer(PeerNode pn, boolean ignoreOpennet, boolean reactivate)
{
assert(pn != null);
+ pn.forceCancelDisconnecting();
synchronized (this) {
for (int i = 0; i < myPeers.length; i++) {
if (myPeers[i].equals(pn)) {
Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java 2007-09-26 09:48:42 UTC
(rev 15311)
+++ trunk/freenet/src/freenet/node/PeerNode.java 2007-09-26 09:55:30 UTC
(rev 15312)
@@ -2737,4 +2737,13 @@
}
setPeerNodeStatus(System.currentTimeMillis());
}
+
+ /** Called to cancel a delayed disconnect. Always succeeds even if the
node was not being
+ * disconnected. */
+ public void forceCancelDisconnecting() {
+ synchronized(this) {
+ disconnecting = false;
+ }
+ setPeerNodeStatus(System.currentTimeMillis());
+ }
}