Author: rjung
Date: Tue Jun 30 16:52:32 2009
New Revision: 789826

URL: http://svn.apache.org/viewvc?rev=789826&view=rev
Log:
BZ 46990: Improve locking in membership.
Backport of r771009 from TC 6.0.x.

Modified:
    tomcat/sandbox/tomcat-oacc/trunk/docs/changelog.xml
    
tomcat/sandbox/tomcat-oacc/trunk/src/share/org/apache/catalina/cluster/mcast/McastMembership.java
    
tomcat/sandbox/tomcat-oacc/trunk/src/share/org/apache/catalina/cluster/membership/McastMembership.java

Modified: tomcat/sandbox/tomcat-oacc/trunk/docs/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/sandbox/tomcat-oacc/trunk/docs/changelog.xml?rev=789826&r1=789825&r2=789826&view=diff
==============================================================================
--- tomcat/sandbox/tomcat-oacc/trunk/docs/changelog.xml (original)
+++ tomcat/sandbox/tomcat-oacc/trunk/docs/changelog.xml Tue Jun 30 16:52:32 2009
@@ -33,6 +33,10 @@
   <subsection name="Cluster">
       <changelog>
       <fix>
+        <bug>46990</bug>: Improve locking in membership.
+        Backport from Tomcat 6.0. (rjung)
+      </fix>
+      <fix>
         <bug>47389</bug>: DeltaManager doesn't do session replication if
         notifySessionListenersOnReplication=false. (fhanik, rjung)
       </fix>

Modified: 
tomcat/sandbox/tomcat-oacc/trunk/src/share/org/apache/catalina/cluster/mcast/McastMembership.java
URL: 
http://svn.apache.org/viewvc/tomcat/sandbox/tomcat-oacc/trunk/src/share/org/apache/catalina/cluster/mcast/McastMembership.java?rev=789826&r1=789825&r2=789826&view=diff
==============================================================================
--- 
tomcat/sandbox/tomcat-oacc/trunk/src/share/org/apache/catalina/cluster/mcast/McastMembership.java
 (original)
+++ 
tomcat/sandbox/tomcat-oacc/trunk/src/share/org/apache/catalina/cluster/mcast/McastMembership.java
 Tue Jun 30 16:52:32 2009
@@ -38,6 +38,8 @@
 {
     protected static final McastMember[] EMPTY_MEMBERS = new McastMember[0];
     
+    private final Object membersLock = new Object();
+    
     /**
      * The name of this membership, has to be the same as the name for the 
local
      * member
@@ -113,7 +115,7 @@
      * @param member The member to add
      */
     protected void addMcastMember(McastMember member) {
-      synchronized (members) {
+      synchronized (membersLock) {
           McastMember results[] =
             new McastMember[members.length + 1];
           for (int i = 0; i < members.length; i++)
@@ -130,7 +132,7 @@
      * @param member The member to remove
      */
     protected void removeMcastMember(McastMember member) {
-        synchronized (members) {
+        synchronized (membersLock) {
             int n = -1;
             for (int i = 0; i < members.length; i++) {
                 if (members[i] == member) {

Modified: 
tomcat/sandbox/tomcat-oacc/trunk/src/share/org/apache/catalina/cluster/membership/McastMembership.java
URL: 
http://svn.apache.org/viewvc/tomcat/sandbox/tomcat-oacc/trunk/src/share/org/apache/catalina/cluster/membership/McastMembership.java?rev=789826&r1=789825&r2=789826&view=diff
==============================================================================
--- 
tomcat/sandbox/tomcat-oacc/trunk/src/share/org/apache/catalina/cluster/membership/McastMembership.java
 (original)
+++ 
tomcat/sandbox/tomcat-oacc/trunk/src/share/org/apache/catalina/cluster/membership/McastMembership.java
 Tue Jun 30 16:52:32 2009
@@ -38,6 +38,8 @@
 {
     protected static final McastMember[] EMPTY_MEMBERS = new McastMember[0];
     
+    private final Object membersLock = new Object();
+    
     /**
      * The name of this membership, has to be the same as the name for the 
local
      * member
@@ -113,7 +115,7 @@
      * @param member The member to add
      */
     protected void addMcastMember(McastMember member) {
-      synchronized (members) {
+      synchronized (membersLock) {
           McastMember results[] =
             new McastMember[members.length + 1];
           for (int i = 0; i < members.length; i++)
@@ -130,7 +132,7 @@
      * @param member The member to remove
      */
     protected void removeMcastMember(McastMember member) {
-        synchronized (members) {
+        synchronized (membersLock) {
             int n = -1;
             for (int i = 0; i < members.length; i++) {
                 if (members[i] == member) {



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to