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.