You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@river.apache.org by pe...@apache.org on 2012/11/16 13:43:01 UTC

svn commit: r1410320 - /river/jtsk/trunk/qa/src/com/sun/jini/test/share/BaseQATest.java

Author: peter_firmstone
Date: Fri Nov 16 12:43:01 2012
New Revision: 1410320

URL: http://svn.apache.org/viewvc?rev=1410320&view=rev
Log:
Attempt to fix what appear to be some synchronisation issues in test failures.

Modified:
    river/jtsk/trunk/qa/src/com/sun/jini/test/share/BaseQATest.java

Modified: river/jtsk/trunk/qa/src/com/sun/jini/test/share/BaseQATest.java
URL: http://svn.apache.org/viewvc/river/jtsk/trunk/qa/src/com/sun/jini/test/share/BaseQATest.java?rev=1410320&r1=1410319&r2=1410320&view=diff
==============================================================================
--- river/jtsk/trunk/qa/src/com/sun/jini/test/share/BaseQATest.java (original)
+++ river/jtsk/trunk/qa/src/com/sun/jini/test/share/BaseQATest.java Fri Nov 16 12:43:01 2012
@@ -1441,14 +1441,16 @@ abstract public class BaseQATest extends
      *  numbers when starting lookup services.
      */
     protected boolean portInUse(int port) {
-        for(int i=0;i<lookupsStarted.size();i++) {
-            LocatorGroupsPair pair = (LocatorGroupsPair)lookupsStarted.get(i);
-            int curPort = (pair.locator).getPort();
-            if(port == curPort) {
-                logger.log(Level.FINE, "port in use: " + port);
-                return true;
+        synchronized (lookupsStarted){
+            Iterator ls = lookupsStarted.iterator();
+            while (ls.hasNext()){
+                LocatorGroupsPair pair = (LocatorGroupsPair) ls.next();
+                if (port == pair.locator.getPort()){
+                    logger.log(Level.FINE, "port in use: " + port);
+                    return true;
+                }
             }
-        }//end loop
+        }
         return false;
     }//end portInUse
 
@@ -1526,8 +1528,14 @@ abstract public class BaseQATest extends
                 LocatorGroupsPair pair
                                = (LocatorGroupsPair)initLookupsToStart.get(i);
                 int port = (pair.locator).getPort();
-                if(portInUse(port)) port = 0;
-                String hostname = startLookup(i,port, pair.locator.getHost());
+                String hostname = null;
+                synchronized (lookupsStarted){
+                    // This synchronized block ensures that initialisation is
+                    // atomic, so two lookups cannot be started with the same
+                    // port.
+                    if(portInUse(port)) port = 0;
+                    hostname = startLookup(i,port, pair.locator.getHost());
+                }
 		logger.log(Level.FINEST, 
 			   "service host is '" + hostname 
 			   + "', this host is '" + config.getLocalHostName() + "'");