Description of problem: For a small number of asynchronous http requests, invoking AsyncContext.complete() blocks the current thread, sometimes for as long as the timeout set in "org.apache.coyote.http11.DEFAULT_CONNECTION_TIMEOUT". For instance: "pool-5-thread-3" prio=6 tid=0x000000000b3f9800 nid=0x11f0 waiting for monitor entry [0x000000000e5bf000] java.lang.Thread.State: BLOCKED (on object monitor) at org.apache.coyote.http11.Http11Processor.action(Http11Processor.java:1149) - waiting to lock <0x00000000eb88a8b8> (a org.apache.coyote.http11.Http11Processor) at org.apache.coyote.Request.action(Request.java:360) at org.apache.catalina.connector.Request.wakeup(Request.java:2601) at org.apache.catalina.connector.Request$AsyncContextImpl.complete(Request.java:3419) at com.cgi.dsp.async.servlet.AsyncReadServlet$1.run(AsyncReadServlet.java:69) at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) at java.util.concurrent.FutureTask.run(Unknown Source) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(Unknown Source) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Locked ownable synchronizers: - <0x00000000eda09618> (a java.util.concurrent.ThreadPoolExecutor$Worker) The thread which holds the Http11Processor lock 0x00000000eb88a8b8, "http-127.0.0.1:8080-2" daemon prio=6 tid=0x000000000b3f3800 nid=0x22b0 runnable [0x000000000df3f000] java.lang.Thread.State: RUNNABLE at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(Unknown Source) at java.net.SocketInputStream.read(Unknown Source) at org.apache.coyote.http11.InternalInputBuffer.fill(InternalInputBuffer.java:713) at org.apache.coyote.http11.InternalInputBuffer.parseRequestLine(InternalInputBuffer.java:351) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:819) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:656) - locked <0x00000000eb88a8b8> (a org.apache.coyote.http11.Http11Processor) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:921) at java.lang.Thread.run(Unknown Source) Version-Release number of selected component (if applicable): EAP 6.4.11 & 6.4.12 Actual results: AsyncContext.complete() may block for long periods due to pending Http11Processor.process calls on the same processor. Expected results: AsyncContext.complete() is not blocked by InternalInputBuffer.parseRequestLine. Additional info: This is introduced by the synchronization added to fix bz-1370182. The issue is avoided when using the NIO connector.
Failed QA. r2682 did not make it to JBossWeb 7.5.21.Final-redhat-1
Verified with EAP 6.4.15.CP.CR2
Released on May 18 as part of EAP 6.4.15.