Author: rjung
Date: Thu Apr 15 19:08:54 2010
New Revision: 934551
URL: http://svn.apache.org/viewvc?rev=934551&view=rev
Log:
Fix BZ46384: Correct synchronisation problem that leads to cluster members
permanently disappearing.
Port of r884960 from TC 5.5.x.
Modified:
tomcat/sandbox/tomcat-oacc/trunk/docs/changelog.xml
tomcat/sandbox/tomcat-oacc/trunk/src/share/org/apache/catalina/cluster/mcast/McastServiceImpl.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=934551&r1=934550&r2=934551&view=diff
==============================================================================
--- tomcat/sandbox/tomcat-oacc/trunk/docs/changelog.xml (original)
+++ tomcat/sandbox/tomcat-oacc/trunk/docs/changelog.xml Thu Apr 15 19:08:54 2010
@@ -33,6 +33,16 @@
<subsection name="Cluster">
<changelog>
<fix>
+ <bug>46384</bug>: Correct synchronisation issue that could lead to a
+ cluster member disappering permanently.
+ Port from Tomcat 5.5. (rjung)
+ </fix>
+ <fix>
+ Spurious startup errors during session transfer.
+ Sessions get transferred, but node still waits until timeout.
+ Port from Tomcat 5.5. (rjung)
+ </fix>
+ <fix>
<bug>43840</bug>: Include user principal if possible when serializing /
de-serializing sessions.
Port from Tomcat 6.0. (rjung)
Modified:
tomcat/sandbox/tomcat-oacc/trunk/src/share/org/apache/catalina/cluster/mcast/McastServiceImpl.java
URL:
http://svn.apache.org/viewvc/tomcat/sandbox/tomcat-oacc/trunk/src/share/org/apache/catalina/cluster/mcast/McastServiceImpl.java?rev=934551&r1=934550&r2=934551&view=diff
==============================================================================
---
tomcat/sandbox/tomcat-oacc/trunk/src/share/org/apache/catalina/cluster/mcast/McastServiceImpl.java
(original)
+++
tomcat/sandbox/tomcat-oacc/trunk/src/share/org/apache/catalina/cluster/mcast/McastServiceImpl.java
Thu Apr 15 19:08:54 2010
@@ -266,23 +266,25 @@ public class McastServiceImpl
McastMember m = McastMember.getMember(data);
if(log.isDebugEnabled())
log.debug("Mcast receive ping from member " + m);
- if ( membership.memberAlive(m) ) {
- if(log.isDebugEnabled())
- log.debug("Mcast add member " + m);
- service.memberAdded(m);
+ synchronized (membershipMutex) {
+ if ( membership.memberAlive(m) ) {
+ if(log.isDebugEnabled())
+ log.debug("Mcast add member " + m);
+ service.memberAdded(m);
+ }
}
} finally {
checkExpire();
}
}
- protected Object expiredMutex = new Object();
+ protected final Object membershipMutex = new Object();
/**
* check member expire or alive
*/
protected void checkExpire() {
- synchronized (expiredMutex) {
+ synchronized (membershipMutex) {
McastMember[] expired = membership.expire(timeToExpiration);
for ( int i=0; i<expired.length; i++) {
if(log.isDebugEnabled())
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]