This is an automated email from the ASF dual-hosted git repository.

markt pushed a commit to branch 8.5.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/8.5.x by this push:
     new 417eb04  Differentiate between error conditions and clean shutdown.
417eb04 is described below

commit 417eb04be86649470fa7985b65cb5ece531d6d54
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Thu Mar 5 13:36:50 2020 +0000

    Differentiate between error conditions and clean shutdown.
    
    Allow an async request to complete cleanly if the Connector is paused
    before complete() is called on a Container thread.
---
 java/org/apache/coyote/AbstractProcessorLight.java | 2 +-
 java/org/apache/coyote/ajp/AjpProcessor.java       | 6 +++++-
 java/org/apache/coyote/http11/Http11Processor.java | 4 ++--
 webapps/docs/changelog.xml                         | 4 ++++
 4 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/java/org/apache/coyote/AbstractProcessorLight.java 
b/java/org/apache/coyote/AbstractProcessorLight.java
index b26b41f..709530d 100644
--- a/java/org/apache/coyote/AbstractProcessorLight.java
+++ b/java/org/apache/coyote/AbstractProcessorLight.java
@@ -77,7 +77,7 @@ public abstract class AbstractProcessorLight implements 
Processor {
                         "], State out: [" + state + "]");
             }
 
-            if (state != SocketState.CLOSED && isAsync()) {
+            if (isAsync()) {
                 state = asyncPostProcess();
                 if (getLog().isDebugEnabled()) {
                     getLog().debug("Socket: [" + socketWrapper +
diff --git a/java/org/apache/coyote/ajp/AjpProcessor.java 
b/java/org/apache/coyote/ajp/AjpProcessor.java
index 6109719..d76fdcc 100644
--- a/java/org/apache/coyote/ajp/AjpProcessor.java
+++ b/java/org/apache/coyote/ajp/AjpProcessor.java
@@ -419,7 +419,11 @@ public class AjpProcessor extends AbstractProcessor {
             socketWrapper.setReadTimeout(keepAliveTimeout);
         }
         recycle();
-        return SocketState.OPEN;
+        if (endpoint.isPaused()) {
+            return SocketState.CLOSED;
+        } else {
+            return SocketState.OPEN;
+        }
     }
 
 
diff --git a/java/org/apache/coyote/http11/Http11Processor.java 
b/java/org/apache/coyote/http11/Http11Processor.java
index 763ac25..2fa81be 100644
--- a/java/org/apache/coyote/http11/Http11Processor.java
+++ b/java/org/apache/coyote/http11/Http11Processor.java
@@ -680,7 +680,7 @@ public class Http11Processor extends AbstractProcessor {
 
         rp.setStage(org.apache.coyote.Constants.STAGE_ENDED);
 
-        if (getErrorState().isError() || endpoint.isPaused()) {
+        if (getErrorState().isError() || (endpoint.isPaused() && !isAsync())) {
             return SocketState.CLOSED;
         } else if (isAsync()) {
             return SocketState.LONG;
@@ -1282,7 +1282,7 @@ public class Http11Processor extends AbstractProcessor {
 
     @Override
     protected SocketState dispatchEndRequest() {
-        if (!keepAlive) {
+        if (!keepAlive || endpoint.isPaused()) {
             return SocketState.CLOSED;
         } else {
             endRequest();
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 7176753..e9a5041 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -139,6 +139,10 @@
         <code>setEnableSessionCreation</code> for <code>OpenSSLEngine</code>.
         Pull request provided by Alexander Scheel. (markt)
       </fix>
+      <fix>
+        Allow async requests to complete cleanly when the Connector is paused
+        before <code>complete()</code> is called on a container thread. (markt)
+      </fix>
     </changelog>
   </subsection>
   <subsection name="Jasper">


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

Reply via email to