Implement keep alive timeout logic
authorfhanik <fhanik@13f79535-47bb-0310-9956-ffa450edef68>
Wed, 25 Apr 2007 18:29:50 +0000 (18:29 +0000)
committerfhanik <fhanik@13f79535-47bb-0310-9956-ffa450edef68>
Wed, 25 Apr 2007 18:29:50 +0000 (18:29 +0000)
git-svn-id: https://svn.apache.org/repos/asf/tomcat/tc6.0.x/trunk@532434 13f79535-47bb-0310-9956-ffa450edef68

java/org/apache/catalina/tribes/group/interceptors/TcpFailureDetector.java
java/org/apache/catalina/tribes/transport/AbstractSender.java
java/org/apache/catalina/tribes/transport/PooledSender.java
java/org/apache/catalina/tribes/transport/nio/ParallelNioSender.java

index 37a66f9..3fb1f68 100644 (file)
@@ -198,7 +198,7 @@ public class TcpFailureDetector extends ChannelInterceptorBase {
         }catch ( Exception x ) {
             log.warn("Unable to perform heartbeat on the TcpFailureDetector.",x);
         } finally {
-            super.heartbeat();
+            
         }
     }
     
index 2695d63..d5fe7f1 100644 (file)
@@ -113,7 +113,7 @@ public abstract class AbstractSender implements DataSender {
     public boolean keepalive() {
         boolean disconnect = false;
         if ( keepAliveCount >= 0 && requestCount>keepAliveCount ) disconnect = true;
-        else if ( keepAliveTime >= 0 && keepAliveTime> (System.currentTimeMillis()-connectTime) ) disconnect = true;
+        else if ( keepAliveTime >= 0 && (System.currentTimeMillis()-connectTime)>keepAliveTime ) disconnect = true;
         if ( disconnect ) disconnect();
         return disconnect;
     }
index efa767f..a344c14 100644 (file)
@@ -80,7 +80,7 @@ public abstract class PooledSender extends AbstractSender implements MultiPointS
 
     public boolean keepalive() {
         //do nothing, the pool checks on every return
-        return false;
+        return (queue==null)?false:queue.checkIdleKeepAlive();
     }
 
     
@@ -130,6 +130,16 @@ public abstract class PooledSender extends AbstractSender implements MultiPointS
         public int getInPoolSize() {
             return notinuse.size();
         }
+        
+        public synchronized boolean checkIdleKeepAlive() {
+            DataSender[] list = new DataSender[notinuse.size()];
+            notinuse.toArray(list);
+            boolean result = false;
+            for (int i=0; i<list.length; i++) {
+                result = result | list[i].keepalive();
+            }
+            return result;
+        }
 
         public synchronized DataSender getSender(long timeout) {
             long start = System.currentTimeMillis();
index 5888d22..c606e44 100644 (file)
@@ -285,6 +285,7 @@ public class ParallelNioSender extends AbstractSender implements MultiPointSende
             NioSender sender = (NioSender)entry.getValue();
             if ( sender.keepalive() ) {
                 nioSenders.remove(entry.getKey());
+                result = true;
             }
         }
         return result;