From 8afc5254ecbdae99163da31a8cd7ebe632b0c18a Mon Sep 17 00:00:00 2001 From: rjung Date: Sat, 24 Sep 2011 15:57:03 +0000 Subject: [PATCH] Break from AJP CPING handling if endpoint is 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 | 4 ++++ java/org/apache/coyote/ajp/AjpNioProcessor.java | 4 ++++ java/org/apache/coyote/ajp/AjpProcessor.java | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/java/org/apache/coyote/ajp/AjpAprProcessor.java b/java/org/apache/coyote/ajp/AjpAprProcessor.java index d6b0b566e..ebf3ee5e4 100644 --- a/java/org/apache/coyote/ajp/AjpAprProcessor.java +++ b/java/org/apache/coyote/ajp/AjpAprProcessor.java @@ -134,6 +134,10 @@ public class AjpAprProcessor extends AbstractAjpProcessor { // 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; diff --git a/java/org/apache/coyote/ajp/AjpNioProcessor.java b/java/org/apache/coyote/ajp/AjpNioProcessor.java index bd53f13d6..63b596ef6 100644 --- a/java/org/apache/coyote/ajp/AjpNioProcessor.java +++ b/java/org/apache/coyote/ajp/AjpNioProcessor.java @@ -118,6 +118,10 @@ public class AjpNioProcessor extends AbstractAjpProcessor { // 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) { diff --git a/java/org/apache/coyote/ajp/AjpProcessor.java b/java/org/apache/coyote/ajp/AjpProcessor.java index cdebea69c..d1c000298 100644 --- a/java/org/apache/coyote/ajp/AjpProcessor.java +++ b/java/org/apache/coyote/ajp/AjpProcessor.java @@ -136,6 +136,10 @@ public class AjpProcessor extends AbstractAjpProcessor { // 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) { -- 2.11.0