https://bz.apache.org/bugzilla/show_bug.cgi?id=59220

            Bug ID: 59220
           Summary: AsyncListener#onComplete not called after timeout if
                    buffer is flushed
           Product: Tomcat 8
           Version: 8.0.32
          Hardware: PC
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Catalina
          Assignee: dev@tomcat.apache.org
          Reporter: nisco...@googlemail.com

If an async dispatch cycle is started and a timeout occurs before the response
buffer is flushed using response#flushBuffer(), then the
AsyncListener#onTimeout()
method followed by the AsyncListener#onComplete() are correctly called.

However, if the buffer is flushed before the timeout occurs, the 
AsyncListener#onTimeout() method will be called, but the 
AsyncListener#onComplete() will not be.

A sample servlet demonstrating the problem, AsyncDebugListener, is provided 
at the following location:

https://github.com/msnicklous/AsyncDebug

Build the AsyncDebugListener module using 'mvn install' and deploy it on
Tomcat.

The service method and each of the AsyncListener methods logs output to the
AsyncListener.log file. You can follow execution by looking at the logs.

Assuming Tomcat is installed locally, you can use the following URLs:

1) No timeout - works correctly:

http://localhost:8080/AsyncDebugListener/ltest?reps=3

2) Timeout, no flush - works correctly:

http://localhost:8080/AsyncDebugListener/ltest?reps=3&timeout

3) Flush before timeout - error case:

http://localhost:8080/AsyncDebugListener/ltest?reps=3&timeout&flush

>From the logs, you will see that AsyncListener#onTimeout() was called, but  
AsyncListener#onComplete() was not.

Thanks for having a look at this!

-- 
You are receiving this mail because:
You are the assignee for the bug.

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

Reply via email to