[Jboss-cvs] JBossAS SVN: r56530 - trunk/cluster/src/main/org/jboss/ha/framework/server

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Sun Sep 3 12:09:23 EDT 2006


Author: bstansberry at jboss.com
Date: 2006-09-03 12:09:23 -0400 (Sun, 03 Sep 2006)
New Revision: 56530

Modified:
   trunk/cluster/src/main/org/jboss/ha/framework/server/HAPartitionImpl.java
Log:
[JBAS-3619] Don't lock listeners list while notifying listeners

Modified: trunk/cluster/src/main/org/jboss/ha/framework/server/HAPartitionImpl.java
===================================================================
--- trunk/cluster/src/main/org/jboss/ha/framework/server/HAPartitionImpl.java	2006-09-03 15:55:48 UTC (rev 56529)
+++ trunk/cluster/src/main/org/jboss/ha/framework/server/HAPartitionImpl.java	2006-09-03 16:09:23 UTC (rev 56530)
@@ -1352,30 +1352,34 @@
       log.debug("Begin notifyListeners, viewID: "+viewID);
       synchronized(theListeners)
       {
-         for (int i = 0; i < theListeners.size(); i++)
+         // JBAS-3619 -- don't hold synch lock while notifying
+         theListeners = (ArrayList) theListeners.clone();
+      }
+      
+      for (int i = 0; i < theListeners.size(); i++)
+      {
+         HAMembershipListener aListener = null;
+         try
          {
-            HAMembershipListener aListener = null;
-            try
+            aListener = (HAMembershipListener) theListeners.get(i);
+            if(originatingGroups != null && (aListener instanceof HAMembershipExtendedListener))
             {
-               aListener = (HAMembershipListener) theListeners.get(i);
-               if(originatingGroups != null && (aListener instanceof HAMembershipExtendedListener))
-               {
-                  HAMembershipExtendedListener exListener = (HAMembershipExtendedListener) aListener;
-                  exListener.membershipChangedDuringMerge (deadMembers, newMembers,
-                     allMembers, originatingGroups);
-               }
-               else
-               {
-                  aListener.membershipChanged(deadMembers, newMembers, allMembers);
-               }
+               HAMembershipExtendedListener exListener = (HAMembershipExtendedListener) aListener;
+               exListener.membershipChangedDuringMerge (deadMembers, newMembers,
+                  allMembers, originatingGroups);
             }
-            catch (Throwable e)
+            else
             {
-               // a problem in a listener should not prevent other members to receive the new view
-               log.warn("HAMembershipListener callback failure: "+aListener, e);
+               aListener.membershipChanged(deadMembers, newMembers, allMembers);
             }
          }
+         catch (Throwable e)
+         {
+            // a problem in a listener should not prevent other members to receive the new view
+            log.warn("HAMembershipListener callback failure: "+aListener, e);
+         }
       }
+      
       log.debug("End notifyListeners, viewID: "+viewID);
    }
 




More information about the jboss-cvs-commits mailing list