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

            Bug ID: 57683
           Summary: Crash of stockticket async example caused by an
                    aborted client request
           Product: Tomcat 7
           Version: 7.0.59
          Hardware: PC
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Examples
          Assignee: dev@tomcat.apache.org
          Reporter: knst.koli...@gmail.com

I mentioned this issue in "Time for 7.0.60" thread on dev@.

It is a bug with error handling in example webapp. It is not a regression from
recent changes. It is reproducible with 7.0.59.

Steps to reproduce:
Using Tomcat 7.0.59, JDK 6u45.

1. Start Tomcat

2. Visit stockicker example,
http://localhost:8080/examples/async/stockticker

3. Abort the request while the page is being loaded (Press "Esc" key on
keyboard)

4. Re-visit the example
http://localhost:8080/examples/async/stockticker

Expected: Working stockicker example.

Actual:
1) Browser waits for a response. After several seconds the progress indicator
stops. A blank page is displayed.

2) Access log shows response status 200, but byte counter is zero ("-").

127.0.0.1 - - [10/Mar/2015:17:45:31 +0300] "GET /examples/async/stockticker
HTTP/1.1" 200 -

3) Looking into catalina.2015-03-10.log, there is the following exception:
[[[
10.03.2015 17:36:58 org.apache.coyote.AbstractProcessor setErrorState
INFO: An error occurred in processing while on a non-container thread. The
connection will be closed immediately
java.net.SocketException: Software caused connection abort: socket write error
    at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
    at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
    at
org.apache.coyote.http11.InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:215)
    at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:480)
    at
org.apache.coyote.http11.InternalOutputBuffer.flush(InternalOutputBuffer.java:119)
    at
org.apache.coyote.http11.AbstractHttp11Processor.action(AbstractHttp11Processor.java:800)
    at org.apache.coyote.Response.action(Response.java:172)
    at
org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:363)
    at org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:331)
    at org.apache.catalina.connector.CoyoteWriter.flush(CoyoteWriter.java:98)
    at async.AsyncStockServlet.writeStock(AsyncStockServlet.java:98)
    at async.AsyncStockServlet.tick(AsyncStockServlet.java:81)
    at async.Stockticker.run(Stockticker.java:84)
    at java.lang.Thread.run(Thread.java:662)
]]]

4) Looking at console,
There is the same exception as in "3)",
followed by the following exception:
[[[
java.lang.IllegalStateException: The request associated with the AsyncContext
has already completed processing.
        at
org.apache.catalina.core.AsyncContextImpl.check(AsyncContextImpl.java
:553)
        at
org.apache.catalina.core.AsyncContextImpl.getResponse(AsyncContextImp
l.java:265)
        at async.AsyncStockServlet.writeStock(AsyncStockServlet.java:86)
        at async.AsyncStockServlet.tick(AsyncStockServlet.java:81)
        at async.Stockticker.run(Stockticker.java:84)
        at java.lang.Thread.run(Thread.java:662)
]]]

Essentially, the async.Stockticker thread crashed due to a non handled ISE.
This explains the behaviour.

5) The exception in "4)" is logged to the console only. It is not logged into
Tomcat log files.

-- 
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