On 11/02/2016 11:44, Thomas Boniface wrote:
> 2016-02-11 12:16 GMT+01:00 Mark Thomas <ma...@apache.org>:
>> On 11/02/2016 11:07, Thomas Boniface wrote:

<snip/>

>>> I also wonder what can be done or not while in the onTimeout thread, can
>> I
>>> still do some asynchronous operation (retrieving content from http
>> request)
>>> and is writing to the reponse from this thread, as long as I ensured this
>>> done in a thread safe way, ok ?
>>
>> This is all in the Servlet spec.
>>
> I'll study the spec, I spent a lot of time looking for some documentation
> without thinking of reading the specs themselves, my bad.
> 
>>
>> In summary:
>> - You can perform any operation that is valid for a request in async mode.
>>
> This will have no impact on other request onTimeout triggering no matter
> what I do within the onTimeout ?

Correct. The timeout thread dispatches the processing of the timeout to
a separate thread for each AsyncContext that is timing out.

>> - You MUST call complete() or dispatch() before exiting onTimeout().
>>
> If the onTimeout occurs but another thread created by the same request is
> already writing the response I assume this thread will call complete() and
> the onTimeout thread must not do anything ?

No. The onTimeout thread MUST call complete() or dispatch(). If another
application thread is still performing processing then onTimeout() needs
to cancel that processing. Applications are responsible for making sure
all of this happens in a thread-safe manner.

If onTimeout() doesn't call complete(), Tomcat will followed by a 500
response.

If the application thread continues to processing then all sorts of
nasty things will happen because Tomcat will recycle the request and
response and at some point they will be re-used.

Mark

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

Reply via email to