Hi,

I have a question about Async state DISPATCHING.

I have the following scenario
- Application invokes startAsync() and then continues processing in a
separate non-container thread A.
- At some point thread A makes dispatch() -> Async state is changed to
DISPATCHING
- At the same time a socket error occurs and thread B tries to change  the
Async state to ERROR, as the state was already changed to DISPATCHING, the
exception below occurs and the state cannot be changed to ERROR.

Isn't that a problem as onError event will not be called?
Why don't we treat DISPATCHING as DISPATCHED in asyncError?
https://github.com/apache/tomcat/blob/trunk/java/org/apache/coyote/AsyncStateMachine.java#L388

Thanks,
Violeta

org.apache.catalina.connector.CoyoteAdapter.asyncDispatch Exception while
processing an asynchronous request

 java.lang.IllegalStateException: Calling [asyncError()] is not valid for a
request with Async state [DISPATCHING]

at
org.apache.coyote.AsyncStateMachine.asyncError(AsyncStateMachine.java:398)

at org.apache.coyote.AbstractProcessor.action(AbstractProcessor.java:393)

at org.apache.coyote.Request.action(Request.java:390)

at
org.apache.catalina.core.AsyncContextImpl.setErrorState(AsyncContextImpl.java:385)

at
org.apache.catalina.connector.CoyoteAdapter.asyncDispatch(CoyoteAdapter.java:175)

at org.apache.coyote.AbstractProcessor.dispatch(AbstractProcessor.java:225)

at
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:53)

at
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:796)

at
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1366)

at
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)

at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

at
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

at java.lang.Thread.run(Thread.java:745)

Reply via email to