On 02/05/17 09:52, Violeta Georgieva wrote: > 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
It depends. (Async errors and threading issues have been a topic of discussion in the Servlet EG recently.) Could you explain a little more about what triggers this? My initial thoughts are that the socket error should be visible to the application and therefore the application should not call dispatch. Mark > > 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) > --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org