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 SEUNGBIN KO (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

                Created:
                Updated: