[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