AsyncContext.complete() blocks sometimes as long as the DEFAULT_CONNECTION_TIMEOUT

Solution Unverified - Updated -

Issue

  • For a small number of asynchronous http requests after updating 6.4.11+, 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 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)

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

Environment

  • JBoss Enterprise Application Platform (EAP) 6.4.x
    • 6.4.11
    • 6.4.12
    • 6.4.13

Subscriber exclusive content

A Red Hat subscription provides unlimited access to our knowledgebase, tools, and much more.

Current Customers and Partners

Log in for full access

Log In

New to Red Hat?

Learn more about Red Hat subscriptions

Using a Red Hat product through a public cloud?

How to access this content