Uploaded image for project: 'Undertow'
  1. Undertow
  2. UNDERTOW-1594

Deadlock related to io.undertow.protocols.http2.Http2Channel

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: Critical Critical
    • None
    • 2.0.26.Final
    • None
    • None

      WildFly CI experienced a hung job due to a deadlock involving two threads traversing Undertow code.

      https://ci.wildfly.org/viewLog.html?buildId=167522&tab=buildResultsDiv&buildTypeId=WildFlyCore_PullRequest_WildFlyCoreFullIntegration

      I'll attach the full thread dump of all test processes, but this appears to be the key bit (from a server process).

      Found one Java-level deadlock:
      =============================
      "default task-1":
        waiting to lock monitor 0xc6b5f124 (object 0xe2fa9ee8, a io.undertow.protocols.http2.Http2Channel),
        which is held by "default I/O-5"
      "default I/O-5":
        waiting to lock monitor 0xc6b5f190 (object 0xe3048fa8, a java.lang.Object),
        which is held by "default task-1"
      
      Java stack information for the threads listed above:
      ===================================================
      "default task-1":
      	at io.undertow.server.protocol.framed.AbstractFramedChannel.markWritesBroken(AbstractFramedChannel.java:884)
      	- waiting to lock <0xe2fa9ee8> (a io.undertow.protocols.http2.Http2Channel)
      	at io.undertow.server.protocol.framed.AbstractFramedStreamSinkChannel.channelForciblyClosed(AbstractFramedStreamSinkChannel.java:562)
      	at io.undertow.server.protocol.framed.AbstractFramedStreamSinkChannel.close(AbstractFramedStreamSinkChannel.java:539)
      	at org.xnio.IoUtils.safeClose(IoUtils.java:152)
      	at io.undertow.server.protocol.framed.AbstractFramedChannel.queueFrame(AbstractFramedChannel.java:709)
      	at io.undertow.server.protocol.framed.AbstractFramedStreamSinkChannel.queueFinalFrame(AbstractFramedStreamSinkChannel.java:257)
      	- locked <0xe3048f28> (a java.lang.Object)
      	at io.undertow.server.protocol.framed.AbstractFramedStreamSinkChannel.shutdownWrites(AbstractFramedStreamSinkChannel.java:240)
      	- locked <0xe3048f28> (a java.lang.Object)
      	at io.undertow.protocols.http2.Http2Channel.sendGoAway(Http2Channel.java:822)
      	at io.undertow.protocols.http2.Http2Channel.sendGoAway(Http2Channel.java:809)
      	at io.undertow.protocols.http2.Http2Channel.removeStreamSink(Http2Channel.java:968)
      	at io.undertow.protocols.http2.Http2StreamSinkChannel.channelForciblyClosed(Http2StreamSinkChannel.java:68)
      	at io.undertow.protocols.http2.Http2DataStreamSinkChannel.channelForciblyClosed(Http2DataStreamSinkChannel.java:322)
      	at io.undertow.server.protocol.framed.AbstractFramedStreamSinkChannel.close(AbstractFramedStreamSinkChannel.java:539)
      	at org.xnio.IoUtils.safeClose(IoUtils.java:152)
      	at io.undertow.server.protocol.framed.AbstractFramedChannel.queueFrame(AbstractFramedChannel.java:709)
      	at io.undertow.server.protocol.framed.AbstractFramedStreamSinkChannel.queueFinalFrame(AbstractFramedStreamSinkChannel.java:257)
      	- locked <0xe3048fa8> (a java.lang.Object)
      	at io.undertow.server.protocol.framed.AbstractFramedStreamSinkChannel.shutdownWrites(AbstractFramedStreamSinkChannel.java:240)
      	- locked <0xe3048fa8> (a java.lang.Object)
      	at org.xnio.conduits.StreamSinkChannelWrappingConduit.terminateWrites(StreamSinkChannelWrappingConduit.java:75)
      	at org.xnio.conduits.ConduitStreamSinkChannel.shutdownWrites(ConduitStreamSinkChannel.java:178)
      	at io.undertow.channels.DetachableStreamSinkChannel.shutdownWrites(DetachableStreamSinkChannel.java:79)
      	at io.undertow.io.UndertowOutputStream.close(UndertowOutputStream.java:347)
      	at io.undertow.io.UndertowOutputStream.updateWritten(UndertowOutputStream.java:266)
      	at io.undertow.io.UndertowOutputStream.write(UndertowOutputStream.java:209)
      	at io.undertow.io.UndertowOutputStream.write(UndertowOutputStream.java:105)
      	at io.undertow.io.BlockingSenderImpl.send(BlockingSenderImpl.java:131)
      	at io.undertow.io.BlockingSenderImpl.send(BlockingSenderImpl.java:166)
      	at io.undertow.server.handlers.error.SimpleErrorPageHandler$1.handleDefaultResponse(SimpleErrorPageHandler.java:68)
      	at io.undertow.server.HttpServerExchange.endExchange(HttpServerExchange.java:1608)
      	at io.undertow.server.Connectors.executeRootHandler(Connectors.java:401)
      	at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:830)
      	at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
      	at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1982)
      	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
      	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
      	at java.lang.Thread.run(Thread.java:748)
      "default I/O-5":
      	at io.undertow.server.protocol.framed.AbstractFramedStreamSinkChannel.close(AbstractFramedStreamSinkChannel.java:525)
      	- waiting to lock <0xe3048fa8> (a java.lang.Object)
      	at org.xnio.IoUtils.safeClose(IoUtils.java:152)
      	at io.undertow.protocols.http2.Http2Channel.closeSubChannels(Http2Channel.java:645)
      	at io.undertow.server.protocol.framed.AbstractFramedChannel.close(AbstractFramedChannel.java:824)
      	at org.xnio.IoUtils.safeClose(IoUtils.java:152)
      	at io.undertow.protocols.http2.Http2Channel.lastDataRead(Http2Channel.java:593)
      	at io.undertow.server.protocol.framed.AbstractFramedChannel.receive(AbstractFramedChannel.java:379)
      	- locked <0xe2fa9ee8> (a io.undertow.protocols.http2.Http2Channel)
      	at io.undertow.server.protocol.http2.Http2ReceiveListener.handleEvent(Http2ReceiveListener.java:118)
      	at io.undertow.server.protocol.http2.Http2ReceiveListener.handleEvent(Http2ReceiveListener.java:67)
      	at org.xnio.ChannelListeners.invokeChannelListener(ChannelListeners.java:92)
      	at io.undertow.server.protocol.framed.AbstractFramedChannel$FrameReadListener.handleEvent(AbstractFramedChannel.java:951)
      	at io.undertow.server.protocol.framed.AbstractFramedChannel$FrameReadListener.handleEvent(AbstractFramedChannel.java:932)
      	at org.xnio.ChannelListeners.invokeChannelListener(ChannelListeners.java:92)
      	at org.xnio.conduits.ReadReadyHandler$ChannelListenerHandler.readReady(ReadReadyHandler.java:66)
      	at org.xnio.nio.NioSocketConduit.handleReady(NioSocketConduit.java:89)
      	at org.xnio.nio.WorkerThread.run(WorkerThread.java:591)
      
      Found 1 deadlock.
      

              flaviarnn Flavia Rainone
              bstansbe@redhat.com Brian Stansberry
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

                Created:
                Updated: