From: markt Date: Wed, 6 Jul 2011 12:31:50 +0000 (+0000) Subject: Add sync to fix test failures on Linux. X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=b976dcca8815905e106aa7c68a1bd6da76d3e48c;p=tomcat7.0 Add sync to fix test failures on Linux. Should have minimal impact in normal Tomcat usage since each instance/JVM only opens a single socket. git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1143379 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/java/org/apache/catalina/tribes/transport/ReceiverBase.java b/java/org/apache/catalina/tribes/transport/ReceiverBase.java index a5f4438b1..2c31e3874 100644 --- a/java/org/apache/catalina/tribes/transport/ReceiverBase.java +++ b/java/org/apache/catalina/tribes/transport/ReceiverBase.java @@ -50,6 +50,8 @@ public abstract class ReceiverBase implements ChannelReceiver, ListenCallback, R private static final Log log = LogFactory.getLog(ReceiverBase.class); + private static final Object bindLock = new Object(); + private MessageListener listener; private String host = "auto"; private InetAddress bind; @@ -220,23 +222,25 @@ public abstract class ReceiverBase implements ChannelReceiver, ListenCallback, R * @throws IOException */ protected void bind(ServerSocket socket, int portstart, int retries) throws IOException { - InetSocketAddress addr = null; - int port = portstart; - while (retries > 0) { - try { - addr = new InetSocketAddress(getBind(), port); - socket.bind(addr); - setPort(port); - log.info("Receiver Server Socket bound to:"+addr); - retries = 0; - } catch ( IOException x) { - retries--; - if ( retries <= 0 ) { - log.info("Unable to bind server socket to:" + addr + - " throwing error."); - throw x; + synchronized (bindLock) { + InetSocketAddress addr = null; + int port = portstart; + while (retries > 0) { + try { + addr = new InetSocketAddress(getBind(), port); + socket.bind(addr); + setPort(port); + log.info("Receiver Server Socket bound to:"+addr); + retries = 0; + } catch ( IOException x) { + retries--; + if ( retries <= 0 ) { + log.info("Unable to bind server socket to:" + addr + + " throwing error."); + throw x; + } + port++; } - port++; } } } diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml index dbb66fa73..2dae5c4fa 100644 --- a/webapps/docs/changelog.xml +++ b/webapps/docs/changelog.xml @@ -95,6 +95,10 @@ Start to convert non-JUnit tests to JUnit. Remove unnecessary code. (markt) + + Add synchronization to receiver socket binding to prevent test failures + on Linuz. (markt) +