[Jboss-cvs] JBossAS SVN: r56529 - branches/Branch_4_0/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 11:55:50 EDT 2006


Author: bstansberry at jboss.com
Date: 2006-09-03 11:55:48 -0400 (Sun, 03 Sep 2006)
New Revision: 56529

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

Modified: branches/Branch_4_0/cluster/src/main/org/jboss/ha/framework/server/HAPartitionImpl.java
===================================================================
--- branches/Branch_4_0/cluster/src/main/org/jboss/ha/framework/server/HAPartitionImpl.java	2006-09-03 10:11:04 UTC (rev 56528)
+++ branches/Branch_4_0/cluster/src/main/org/jboss/ha/framework/server/HAPartitionImpl.java	2006-09-03 15:55:48 UTC (rev 56529)
@@ -1239,31 +1239,35 @@
       Vector originatingGroups)
    {
       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