diff --git a/history.txt b/history.txt index d802e2979c..add456e93b 100644 --- a/history.txt +++ b/history.txt @@ -1,3 +1,12 @@ +2012-09-25 zzz + * Context: Make files final + * EventLog: Fix IAE on portable + * Jetty: Add non-NIO selector option (ticket #715) + * OutboundEstablishState: Cleanup (ticket #671) + * SimpleByteCache: Concurrent fix + * UPnP: Cleanup & final + * URLLauncher: Add xdg-open (ticket #617) + 2012-09-21 zzz * BuildHandler: Use CoDel for inbound queue * ByteCache: @@ -45,8 +54,8 @@ - Raise netdb store and reply priority * Router: - Boost priority of shutdown thread - - Replace ident log with new, general-purpose event log. - - Use for stops, starts, and updates, and others. + - Replace ident log with new, general-purpose event log; + use for stops, starts, and updates, and others. - New AQM CoDel queue utilities - Startup/shutdown synchronization fixes * RouterAddress: Remove unused expiration field to save space diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java index 87e5bffca0..282c18b422 100644 --- a/router/java/src/net/i2p/router/RouterVersion.java +++ b/router/java/src/net/i2p/router/RouterVersion.java @@ -18,7 +18,7 @@ public class RouterVersion { /** deprecated */ public final static String ID = "Monotone"; public final static String VERSION = CoreVersion.VERSION; - public final static long BUILD = 1; + public final static long BUILD = 2; /** for example "-test" */ public final static String EXTRA = ""; diff --git a/router/java/src/net/i2p/router/transport/UPnP.java b/router/java/src/net/i2p/router/transport/UPnP.java index 1401b3baab..abcd8214e7 100644 --- a/router/java/src/net/i2p/router/transport/UPnP.java +++ b/router/java/src/net/i2p/router/transport/UPnP.java @@ -78,7 +78,7 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener { private volatile boolean thinksWeAreDoubleNatted = false; /** List of ports we want to forward */ - private Set portsToForward; + private final Set portsToForward; /** List of ports we have actually forwarded */ private final Set portsForwarded; /** Callback to call when a forward fails or succeeds */ @@ -88,13 +88,14 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener { super(); _context = context; _log = _context.logManager().getLog(UPnP.class); + portsToForward = new HashSet(); portsForwarded = new HashSet(); addDeviceChangeListener(this); } - public boolean runPlugin() { + public synchronized boolean runPlugin() { synchronized(lock) { - portsToForward = null; + portsToForward.clear(); } return super.start(); } @@ -102,9 +103,9 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener { /** * WARNING - Blocking up to 2 seconds */ - public void terminate() { + public synchronized void terminate() { synchronized(lock) { - portsToForward = null; + portsToForward.clear(); } // this gets spun off in a thread... unregisterPortMappings(); @@ -221,9 +222,10 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener { private void registerPortMappings() { Set ports; synchronized(lock) { - ports = portsToForward; + ports = new HashSet(portsForwarded); } - if(ports == null) return; + if (ports.isEmpty()) + return; registerPorts(ports); } @@ -281,6 +283,8 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener { synchronized(lock) { ports = new HashSet(portsForwarded); } + if (ports.isEmpty()) + return; this.unregisterPorts(ports); } @@ -528,17 +532,15 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener { if(upstreamMaxBitRate > 0) sb.append("
").append(_("UPnP reports the maximum upstream bit rate is {0}bits/sec", DataHelper.formatSize2(upstreamMaxBitRate))); synchronized(lock) { - if(portsToForward != null) { - for(ForwardPort port : portsToForward) { - sb.append("
"); - if(portsForwarded.contains(port)) - // {0} is TCP or UDP - // {1,number,#####} prevents 12345 from being output as 12,345 in the English locale. - // If you want the digit separator in your locale, translate as {1}. - sb.append(_("{0} port {1,number,#####} was successfully forwarded by UPnP.", protoToString(port.protocol), port.portNumber)); - else - sb.append(_("{0} port {1,number,#####} was not forwarded by UPnP.", protoToString(port.protocol), port.portNumber)); - } + for(ForwardPort port : portsToForward) { + sb.append("
"); + if(portsForwarded.contains(port)) + // {0} is TCP or UDP + // {1,number,#####} prevents 12345 from being output as 12,345 in the English locale. + // If you want the digit separator in your locale, translate as {1}. + sb.append(_("{0} port {1,number,#####} was successfully forwarded by UPnP.", protoToString(port.protocol), port.portNumber)); + else + sb.append(_("{0} port {1,number,#####} was not forwarded by UPnP.", protoToString(port.protocol), port.portNumber)); } } @@ -726,13 +728,13 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener { _log.error("ForwardPortCallback changed from "+forwardCallback+" to "+cb+" - using new value, but this is very strange!"); } forwardCallback = cb; - if(portsToForward == null || portsToForward.isEmpty()) { - portsToForward = ports; + if (portsToForward.isEmpty()) { + portsToForward.addAll(ports); portsToForwardNow = ports; portsToDumpNow = null; } else if(ports.isEmpty()) { portsToDumpNow = portsToForward; - portsToForward = ports; + portsToForward.clear(); portsToForwardNow = null; } else { // Some ports to keep, some ports to dump @@ -760,7 +762,8 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener { portsToDumpNow.add(port); } } - portsToForward = ports; + portsToForward.clear(); + portsToForward.addAll(ports); } if(_router == null) { if (_log.shouldLog(Log.WARN)) @@ -768,9 +771,9 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener { return; // When one is found, we will do the forwards } } - if(portsToDumpNow != null) + if(portsToDumpNow != null && !portsToDumpNow.isEmpty()) unregisterPorts(portsToDumpNow); - if(portsToForwardNow != null) + if(portsToForwardNow != null && !portsToForwardNow.isEmpty()) registerPorts(portsToForwardNow); }