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

UT000094: Blocking await method called from IO thread. Blocking IO must be dispatched to a worker thread or deadlocks will result.

XMLWordPrintable

    • Icon: Question Question
    • Resolution: Unresolved
    • Icon: Major Major
    • None
    • None
    • Core, Web Sockets
    • None

      Phenomenon

      Hello.

      We are using the below library for WebSocket.

      • org.springframework.boot:spring-boot-starter-undertow:2.7.4
        • io.undertow:undertow-core:2.2.19.Final
        • io.undertow:undertow-servlet:2.2.19.Final
        • io.undertow:undertow-websockets-jsr:2.2.19.Final

      Recently I received the following error message.

      java.io.IOException: UT000094: Blocking await method called from IO thread. Blocking IO must be dispatched to a worker thread or deadlocks will result.
      	at io.undertow.server.protocol.framed.AbstractFramedStreamSinkChannel.awaitWritable(AbstractFramedStreamSinkChannel.java:295)
      	at io.undertow.server.protocol.framed.AbstractFramedStreamSinkChannel.awaitWritable(AbstractFramedStreamSinkChannel.java:289)
      	at org.xnio.channels.Channels.flushBlocking(Channels.java:64)
      	at io.undertow.websockets.jsr.WebSocketSessionRemoteEndpoint$BasicWebSocketSessionRemoteEndpoint.sendText(WebSocketSessionRemoteEndpoint.java:287)
      	at org.springframework.web.socket.adapter.standard.StandardWebSocketSession.sendTextMessage(StandardWebSocketSession.java:215)
      	at org.springframework.web.socket.adapter.AbstractWebSocketSession.sendMessage(AbstractWebSocketSession.java:106)
      	at com.kakaomobility.bone.connection.handler.WebSocketMessageHandler.handleTextMessage(WebSocketMessageHandler.java:126)
      	at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43)
      	at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75)
      	at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56)
      	at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58)
      	at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:114)
      	at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.access$000(StandardWebSocketHandlerAdapter.java:43)
      	at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:85)
      	at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:82)
      	at io.undertow.websockets.jsr.FrameHandler$7.run(FrameHandler.java:288)
      	at io.undertow.websockets.jsr.ServerWebSocketContainer$1.call(ServerWebSocketContainer.java:170)
      	at io.undertow.websockets.jsr.ServerWebSocketContainer$1.call(ServerWebSocketContainer.java:167)
      	at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
      	at io.undertow.websockets.jsr.ServerWebSocketContainer.invokeEndpointMethod(ServerWebSocketContainer.java:610)
      	at io.undertow.websockets.jsr.ServerWebSocketContainer.invokeEndpointMethod(ServerWebSocketContainer.java:600)
      	at io.undertow.websockets.jsr.FrameHandler.invokeTextHandler(FrameHandler.java:268)
      	at io.undertow.websockets.jsr.FrameHandler.onFullTextMessage(FrameHandler.java:319)
      	at io.undertow.websockets.core.AbstractReceiveListener$2.complete(AbstractReceiveListener.java:156)
      	at io.undertow.websockets.core.AbstractReceiveListener$2.complete(AbstractReceiveListener.java:152)
      	at io.undertow.websockets.core.BufferedTextMessage.read(BufferedTextMessage.java:105)
      	at io.undertow.websockets.core.AbstractReceiveListener.readBufferedText(AbstractReceiveListener.java:152)
      	at io.undertow.websockets.core.AbstractReceiveListener.bufferFullMessage(AbstractReceiveListener.java:90)
      	at io.undertow.websockets.jsr.FrameHandler.onText(FrameHandler.java:184)
      	at io.undertow.websockets.core.AbstractReceiveListener.handleEvent(AbstractReceiveListener.java:44)
      	at io.undertow.websockets.core.AbstractReceiveListener.handleEvent(AbstractReceiveListener.java:33)
      	at org.xnio.ChannelListeners.invokeChannelListener(ChannelListeners.java:92)
      	at io.undertow.server.protocol.framed.AbstractFramedChannel$FrameReadListener.handleEvent(AbstractFramedChannel.java:959)
      	at io.undertow.server.protocol.framed.AbstractFramedChannel$FrameReadListener.handleEvent(AbstractFramedChannel.java:939)
      	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) 

       

       

      When looking at the undertow code, it is understood that it is called in the flow below.

      1. org.xnio.channels.Channels.flushBlocking()
      2. io.undertow.server.protocol.framed.AbstractFramedStreamSinkChannel.
        awaitWritable()

       

      In the last called "awaitWritable()", it is understood that if the current thread is an IO thread, it will throw an exception.


       

      Question

      Regarding this, I have a few questions.

      1. Why raise an exception when the current thread is an IO thread?
      2. Any possible causes for this error to occur?

       

      Thank you.
       

            flaviarnn Flavia Rainone
            raccoonback KOSEUNGBIN oliver (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated: