From 416b0e4540b4f51cdf2d2f5bfab100cb81ddc750 Mon Sep 17 00:00:00 2001
From: zzz
Date: Sat, 17 Jan 2009 17:28:37 +0000
Subject: [PATCH 1/2] Prevent two NTCP Pumpers
---
.../net/i2p/router/transport/CommSystemFacadeImpl.java | 7 ++++---
.../src/net/i2p/router/transport/ntcp/EventPumper.java | 7 +++++++
.../src/net/i2p/router/transport/ntcp/NTCPTransport.java | 8 ++++++++
3 files changed, 19 insertions(+), 3 deletions(-)
diff --git a/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java b/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java
index d20c97846..c94178004 100644
--- a/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java
+++ b/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java
@@ -285,9 +285,10 @@ public class CommSystemFacadeImpl extends CommSystemFacade {
_log.warn("Halting NTCP to change address");
t.stopListening();
newAddr.setOptions(newProps);
- // Give NTCP Pumper time to stop so we don't end up with two...
- // Need better way
- try { Thread.sleep(5*1000); } catch (InterruptedException ie) {}
+ // Wait for NTCP Pumper to stop so we don't end up with two...
+ while (t.isAlive()) {
+ try { Thread.sleep(5*1000); } catch (InterruptedException ie) {}
+ }
t.restartListening(newAddr);
_log.warn("Changed NTCP Address and started up, address is now " + newAddr);
return;
diff --git a/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java b/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java
index d27a95172..9c75f5328 100644
--- a/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java
+++ b/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java
@@ -85,6 +85,13 @@ public class EventPumper implements Runnable {
_selector.wakeup();
}
+ /**
+ * Selector can take quite a while to close after calling stopPumping()
+ */
+ public boolean isAlive() {
+ return _alive || (_selector != null && _selector.isOpen());
+ }
+
public void register(ServerSocketChannel chan) {
if (_log.shouldLog(Log.DEBUG)) _log.debug("Registering server socket channel");
synchronized (_wantsRegister) { _wantsRegister.add(chan); }
diff --git a/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java b/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java
index 67b9296a9..4b5573917 100644
--- a/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java
+++ b/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java
@@ -432,6 +432,10 @@ public class NTCPTransport extends TransportImpl {
return bindAddress();
}
+ public boolean isAlive() {
+ return _pumper.isAlive();
+ }
+
private RouterAddress bindAddress() {
if (_myAddress != null) {
try {
@@ -538,6 +542,10 @@ public class NTCPTransport extends TransportImpl {
}
}
+ /**
+ * This doesn't (completely) block, caller should check isAlive()
+ * before calling startListening() or restartListening()
+ */
public void stopListening() {
if (_log.shouldLog(Log.DEBUG)) _log.debug("Stopping ntcp transport");
_pumper.stopPumping();
From 807f0665b1967c6264154b50b45895858f3c88e7 Mon Sep 17 00:00:00 2001
From: zzz
Date: Sat, 17 Jan 2009 17:31:00 +0000
Subject: [PATCH 2/2] tweak
---
apps/routerconsole/jsp/config.jsp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/apps/routerconsole/jsp/config.jsp b/apps/routerconsole/jsp/config.jsp
index 1c3d81518..132bd5315 100644
--- a/apps/routerconsole/jsp/config.jsp
+++ b/apps/routerconsole/jsp/config.jsp
@@ -75,7 +75,7 @@
with "SSU introductions" - peers who will relay a request from someone you don't know to your
router for your router so that you can make an outbound connection to them. I2P will use these
introductions automatically if it detects that the port is not forwarded (as shown by
- the Status: OK (NAT) line), or you can manually require them here.
+ the Status: Firewalled line), or you can manually require them here.
Users behind symmetric NATs, such as OpenBSD's pf, are not currently supported.