Author: fhanik Date: Thu May 18 12:03:27 2006 New Revision: 407615 URL: http://svn.apache.org/viewvc?rev=407615&view=rev Log: Fixed synchronization issues upon startup, and always using a soTimeout
Modified: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/membership/McastServiceImpl.java Modified: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/membership/McastServiceImpl.java URL: http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/membership/McastServiceImpl.java?rev=407615&r1=407614&r2=407615&view=diff ============================================================================== --- tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/membership/McastServiceImpl.java (original) +++ tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/membership/McastServiceImpl.java Thu May 18 12:03:27 2006 @@ -166,11 +166,12 @@ log.info("Setting multihome multicast interface to:" +mcastBindAddress); socket.setInterface(mcastBindAddress); } //end if - if ( mcastSoTimeout >= 0 ) { - if(log.isInfoEnabled()) - log.info("Setting cluster mcast soTimeout to "+mcastSoTimeout); - socket.setSoTimeout(mcastSoTimeout); - } + //force a so timeout so that we don't block forever + if ( mcastSoTimeout <= 0 ) mcastSoTimeout = (int)sendFrequency; + if(log.isInfoEnabled()) + log.info("Setting cluster mcast soTimeout to "+mcastSoTimeout); + socket.setSoTimeout(mcastSoTimeout); + if ( mcastTTL >= 0 ) { if(log.isInfoEnabled()) log.info("Setting cluster mcast TTL to " + mcastTTL); @@ -198,6 +199,8 @@ if(log.isInfoEnabled()) log.info("Sleeping for "+memberwait+" milliseconds to establish cluster membership"); try {Thread.sleep(memberwait);}catch (InterruptedException ignore){} + if(log.isInfoEnabled()) + log.info("Done sleeping, membership established."); } if ( (level & Channel.MBR_TX_SEQ)==Channel.MBR_TX_SEQ ) { if ( sender != null ) throw new IllegalStateException("McastService.send already running."); @@ -260,7 +263,6 @@ * @throws IOException */ public void receive() throws IOException { - checkExpired(); try { socket.receive(receivePacket); byte[] data = new byte[receivePacket.getLength()]; @@ -283,17 +285,21 @@ //since the receive thread is the same thread //that does membership expiration } + checkExpired(); } - - protected synchronized void checkExpired() { - MemberImpl[] expired = membership.expire(timeToExpiration); - for ( int i=0; i<expired.length; i++) { - if(log.isDebugEnabled()) - log.debug("Mcast exipre member " + expired[i]); - try { - service.memberDisappeared(expired[i]); - }catch ( Exception x ) { - log.error("Unable to process member disappeared message.",x); + + protected Object expiredMutex = new Object(); + protected void checkExpired() { + synchronized (expiredMutex) { + MemberImpl[] expired = membership.expire(timeToExpiration); + for (int i = 0; i < expired.length; i++) { + if (log.isDebugEnabled()) + log.debug("Mcast exipre member " + expired[i]); + try { + service.memberDisappeared(expired[i]); + } catch (Exception x) { + log.error("Unable to process member disappeared message.", x); + } } } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]