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

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

commit 7883f4f91ef14e80865c6c6304709f4d2f0d9ecc
Author: Mark Thomas <[email protected]>
AuthorDate: Fri Nov 6 20:54:59 2026 +0000

    Fix backport
---
 java/org/apache/coyote/AbstractProcessor.java          |  8 ++++++--
 java/org/apache/coyote/AbstractProcessorLight.java     |  4 +++-
 java/org/apache/coyote/AsyncStateMachine.java          |  3 ++-
 .../connector/TestCoyoteAdapterAsyncErrorState.java    | 18 +++++++++---------
 4 files changed, 20 insertions(+), 13 deletions(-)

diff --git a/java/org/apache/coyote/AbstractProcessor.java 
b/java/org/apache/coyote/AbstractProcessor.java
index cf63ae923a..7b3a0527db 100644
--- a/java/org/apache/coyote/AbstractProcessor.java
+++ b/java/org/apache/coyote/AbstractProcessor.java
@@ -224,7 +224,7 @@ public abstract class AbstractProcessor extends 
AbstractProcessorLight implement
 
 
     @Override
-    public SocketState asyncPostProcess() {
+    public SocketState asyncPostProcess() throws IOException {
         return asyncStateMachine.asyncPostProcess();
     }
 
@@ -647,7 +647,11 @@ public abstract class AbstractProcessor extends 
AbstractProcessorLight implement
                 break;
             }
             case ASYNC_POST_PROCESS: {
-                asyncStateMachine.asyncPostProcess();
+                try {
+                    asyncStateMachine.asyncPostProcess();
+                } catch (IOException ioe) {
+                    handleIOException(ioe);
+                }
                 break;
             }
 
diff --git a/java/org/apache/coyote/AbstractProcessorLight.java 
b/java/org/apache/coyote/AbstractProcessorLight.java
index c83e9db48e..b3e53a13c2 100644
--- a/java/org/apache/coyote/AbstractProcessorLight.java
+++ b/java/org/apache/coyote/AbstractProcessorLight.java
@@ -220,8 +220,10 @@ public abstract class AbstractProcessorLight implements 
Processor {
      * Calls the post process of the async state machine.
      *
      * @return The state the caller should put the socket in when this method 
returns
+     *
+     * @throws IOException If an I/O error occurs during the processing of the 
request
      */
-    protected abstract SocketState asyncPostProcess();
+    protected abstract SocketState asyncPostProcess() throws IOException;
 
     /**
      * Returns the logger associated with this processor type.
diff --git a/java/org/apache/coyote/AsyncStateMachine.java 
b/java/org/apache/coyote/AsyncStateMachine.java
index e430df62a0..3d9c50170f 100644
--- a/java/org/apache/coyote/AsyncStateMachine.java
+++ b/java/org/apache/coyote/AsyncStateMachine.java
@@ -16,6 +16,7 @@
  */
 package org.apache.coyote;
 
+import java.io.IOException;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.concurrent.atomic.AtomicLong;
@@ -285,7 +286,7 @@ class AsyncStateMachine {
      * Async has been processed. Whether or not to enter a long poll depends 
on current state. For example, as per
      * SRV.2.3.3.3 can now process calls to complete() or dispatch().
      */
-    synchronized SocketState asyncPostProcess() {
+    synchronized SocketState asyncPostProcess() throws IOException {
         if (state == AsyncState.COMPLETE_PENDING) {
             clearNonBlockingListeners();
             updateState(AsyncState.COMPLETING);
diff --git 
a/test/org/apache/catalina/connector/TestCoyoteAdapterAsyncErrorState.java 
b/test/org/apache/catalina/connector/TestCoyoteAdapterAsyncErrorState.java
index 89de0136a8..c2fe9caecc 100644
--- a/test/org/apache/catalina/connector/TestCoyoteAdapterAsyncErrorState.java
+++ b/test/org/apache/catalina/connector/TestCoyoteAdapterAsyncErrorState.java
@@ -26,14 +26,14 @@ import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
 
-import jakarta.servlet.AsyncContext;
-import jakarta.servlet.AsyncEvent;
-import jakarta.servlet.AsyncListener;
-import jakarta.servlet.DispatcherType;
-import jakarta.servlet.ServletException;
-import jakarta.servlet.http.HttpServlet;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
+import javax.servlet.AsyncContext;
+import javax.servlet.AsyncEvent;
+import javax.servlet.AsyncListener;
+import javax.servlet.DispatcherType;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 
 import org.junit.Assert;
 import org.junit.Test;
@@ -369,7 +369,7 @@ public class TestCoyoteAdapterAsyncErrorState extends 
TomcatBaseTest {
             } catch (IOException ioe) {
                 // Connection reset or timeout. Whatever was received is 
returned.
             }
-            return baos.toString(StandardCharsets.ISO_8859_1);
+            return baos.toString(StandardCharsets.ISO_8859_1.name());
         }
     }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to