tomcat-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Violeta Georgieva <>
Subject Re: isAsyncStarted=true on ERROR dispatch
Date Wed, 13 Jul 2016 12:00:26 GMT

2016-07-12 23:27 GMT+03:00 Rossen Stoyanchev <>:
> hi-
> Starting with Tomcat 8.0.35 when an async request times out, in a
> subsequent error dispatch request.isAsyncStarted() returns true.
> it returned false.
> The Servlet spec says:
> If this request has been dispatched using one of the AsyncContext.dispatch
> methods since it was put
> in asynchronous mode, or a call to AsynContext.complete is made, this
> method returns false.

I think the following part of the specification is important:

In the event that an asynchronous operation times out, the container must
run through the following steps:
- Invoke the AsyncListener.onTimeout method on all the AsyncListener
instances registered with the ServletRequest on which the asynchronous
operation was initiated.
- If none of the listeners called AsyncContext.complete() or any of the
AsyncContext.dispatch methods, perform an error dispatch with a status code
equal to HttpServletResponse.SC_INTERNAL_SERVER_ERROR.
- If no matching error page was found, or the error page did not call
AsyncContext.complete() or any of the AsyncContext.dispatch methods, the
container MUST call AsyncContext.complete().

So isAsyncStarted returns true when in the error page and the error page
should call AsyncContext.complete.

What do you think?


> No explicit mention of ERROR dispatches but I'd assume once the request
> that called startAsync is done, it won't return true any more. For what
> it's worth Jetty still return false on the ERROR dispatch. Here is a repro
> project [1].
> Before creating a ticket I wanted to check if this is expected behavior or
> an unintended side effect of other changes?
> Rossen
> [1]

  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message