Author: kfujino
Date: Mon Jul  9 10:43:30 2012
New Revision: 1359041

URL: http://svn.apache.org/viewvc?rev=1359041&view=rev
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=53513.
Fix race condition between the processing of session sync message and transfer 
complete message.

Modified:
    tomcat/trunk/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java

Modified: tomcat/trunk/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java?rev=1359041&r1=1359040&r2=1359041&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java Mon Jul  
9 10:43:30 2012
@@ -45,6 +45,7 @@ import org.apache.catalina.ha.session.Cl
 import org.apache.catalina.ha.session.DeltaManager;
 import org.apache.catalina.ha.session.JvmRouteBinderValve;
 import org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener;
+import org.apache.catalina.ha.session.SessionMessage;
 import org.apache.catalina.ha.util.IDynamicProperty;
 import org.apache.catalina.tribes.Channel;
 import org.apache.catalina.tribes.ChannelListener;
@@ -784,15 +785,20 @@ public class SimpleTcpCluster extends Li
     public void send(ClusterMessage msg, Member dest) {
         try {
             msg.setAddress(getLocalMember());
+            int sendOptions = channelSendOptions;
+            if (msg instanceof SessionMessage
+                    && ((SessionMessage)msg).getEventType() == 
SessionMessage.EVT_ALL_SESSION_DATA) {
+                sendOptions = 
Channel.SEND_OPTIONS_SYNCHRONIZED_ACK|Channel.SEND_OPTIONS_USE_ACK;
+            }
             if (dest != null) {
                 if (!getLocalMember().equals(dest)) {
-                    channel.send(new Member[] {dest}, msg,channelSendOptions);
+                    channel.send(new Member[] {dest}, msg, sendOptions);
                 } else
                     log.error("Unable to send message to local member " + msg);
             } else {
                 Member[] destmembers = channel.getMembers();
                 if (destmembers.length>0)
-                    channel.send(destmembers,msg,channelSendOptions);
+                    channel.send(destmembers,msg, sendOptions);
                 else if (log.isDebugEnabled())
                     log.debug("No members in cluster, ignoring message:"+msg);
             }



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

Reply via email to