Break from AJP CPING handling if endpoint is
authorrjung <rjung@13f79535-47bb-0310-9956-ffa450edef68>
Sat, 24 Sep 2011 15:57:03 +0000 (15:57 +0000)
committerrjung <rjung@13f79535-47bb-0310-9956-ffa450edef68>
Sat, 24 Sep 2011 15:57:03 +0000 (15:57 +0000)
already paused.

Experimenting shows, that we will otherwise
loose the following request. TC will not
answer it, but mod_jk doesn't resend if properly
configured. CPING is meant to detect this.

Not 100% sure about the call to recycle(),
but didn't find where else it would happen.

git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1175182 13f79535-47bb-0310-9956-ffa450edef68

java/org/apache/coyote/ajp/AjpAprProcessor.java
java/org/apache/coyote/ajp/AjpNioProcessor.java
java/org/apache/coyote/ajp/AjpProcessor.java

index d6b0b56..ebf3ee5 100644 (file)
@@ -134,6 +134,10 @@ public class AjpAprProcessor extends AbstractAjpProcessor<Long> {
                 // not regular request processing
                 int type = requestHeaderMessage.getByte();
                 if (type == Constants.JK_AJP13_CPING_REQUEST) {
+                    if (endpoint.isPaused()) {
+                        recycle(true);
+                        break;
+                    }
                     if (Socket.send(socketRef, pongMessageArray, 0,
                             pongMessageArray.length) < 0) {
                         error = true;
index bd53f13..63b596e 100644 (file)
@@ -118,6 +118,10 @@ public class AjpNioProcessor extends AbstractAjpProcessor<NioChannel> {
                 // not regular request processing
                 int type = requestHeaderMessage.getByte();
                 if (type == Constants.JK_AJP13_CPING_REQUEST) {
+                    if (endpoint.isPaused()) {
+                        recycle(true);
+                        break;
+                    }
                     try {
                         output(pongMessageArray, 0, pongMessageArray.length);
                     } catch (IOException e) {
index cdebea6..d1c0002 100644 (file)
@@ -136,6 +136,10 @@ public class AjpProcessor extends AbstractAjpProcessor<Socket> {
                 // not regular request processing
                 int type = requestHeaderMessage.getByte();
                 if (type == Constants.JK_AJP13_CPING_REQUEST) {
+                    if (endpoint.isPaused()) {
+                        recycle(true);
+                        break;
+                    }
                     try {
                         output.write(pongMessageArray);
                     } catch (IOException e) {