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]

Reply via email to