From c80a5cc1a309568fd6d51aa1b9c2451d8c64999e Mon Sep 17 00:00:00 2001 From: rjung Date: Sun, 25 Sep 2011 21:54:13 +0000 Subject: [PATCH] Don't send 503 if endpoint is paused and we just answered an AJP CPING. If CPING works, mod_jk expects the main request to work too. If we don't want to process the main request we need to fail the CPING received directly before. git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1175594 13f79535-47bb-0310-9956-ffa450edef68 --- java/org/apache/coyote/ajp/AjpAprProcessor.java | 5 ++++- java/org/apache/coyote/ajp/AjpNioProcessor.java | 5 ++++- java/org/apache/coyote/ajp/AjpProcessor.java | 5 ++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/java/org/apache/coyote/ajp/AjpAprProcessor.java b/java/org/apache/coyote/ajp/AjpAprProcessor.java index 1ef9ed49a..db4559047 100644 --- a/java/org/apache/coyote/ajp/AjpAprProcessor.java +++ b/java/org/apache/coyote/ajp/AjpAprProcessor.java @@ -113,6 +113,7 @@ public class AjpAprProcessor extends AbstractAjpProcessor { long socketRef = socket.getSocket().longValue(); Socket.setrbb(socketRef, inputBuffer); Socket.setsbb(socketRef, outputBuffer); + boolean cping = false; // Error flag error = false; @@ -137,6 +138,7 @@ public class AjpAprProcessor extends AbstractAjpProcessor { recycle(true); break; } + cping = true; if (Socket.send(socketRef, pongMessageArray, 0, pongMessageArray.length) < 0) { error = true; @@ -180,12 +182,13 @@ public class AjpAprProcessor extends AbstractAjpProcessor { } } - if (endpoint.isPaused()) { + if (!cping && endpoint.isPaused()) { // 503 - Service unavailable response.setStatus(503); adapter.log(request, response, 0); error = true; } + cping = false; // Process the request in the adapter if (!error) { diff --git a/java/org/apache/coyote/ajp/AjpNioProcessor.java b/java/org/apache/coyote/ajp/AjpNioProcessor.java index ae93736e3..4940a38fa 100644 --- a/java/org/apache/coyote/ajp/AjpNioProcessor.java +++ b/java/org/apache/coyote/ajp/AjpNioProcessor.java @@ -98,6 +98,7 @@ public class AjpNioProcessor extends AbstractAjpProcessor { this.socket = socket.getSocket(); long soTimeout = endpoint.getSoTimeout(); + boolean cping = false; // Error flag error = false; @@ -122,6 +123,7 @@ public class AjpNioProcessor extends AbstractAjpProcessor { recycle(true); break; } + cping = true; try { output(pongMessageArray, 0, pongMessageArray.length); } catch (IOException e) { @@ -167,12 +169,13 @@ public class AjpNioProcessor extends AbstractAjpProcessor { } } - if (endpoint.isPaused()) { + if (!cping && endpoint.isPaused()) { // 503 - Service unavailable response.setStatus(503); adapter.log(request, response, 0); error = true; } + cping = false; // Process the request in the adapter if (!error) { diff --git a/java/org/apache/coyote/ajp/AjpProcessor.java b/java/org/apache/coyote/ajp/AjpProcessor.java index d1c000298..3941f18df 100644 --- a/java/org/apache/coyote/ajp/AjpProcessor.java +++ b/java/org/apache/coyote/ajp/AjpProcessor.java @@ -111,6 +111,7 @@ public class AjpProcessor extends AbstractAjpProcessor { if (keepAliveTimeout > 0) { soTimeout = socket.getSocket().getSoTimeout(); } + boolean cping = false; // Error flag error = false; @@ -140,6 +141,7 @@ public class AjpProcessor extends AbstractAjpProcessor { recycle(true); break; } + cping = true; try { output.write(pongMessageArray); } catch (IOException e) { @@ -183,12 +185,13 @@ public class AjpProcessor extends AbstractAjpProcessor { } } - if (endpoint.isPaused()) { + if (!cping && endpoint.isPaused()) { // 503 - Service unavailable response.setStatus(503); adapter.log(request, response, 0); error = true; } + cping = false; // Process the request in the adapter if (!error) { -- 2.11.0