https://bz.apache.org/bugzilla/show_bug.cgi?id=66574

            Bug ID: 66574
           Summary: Deadlock in websocket code
           Product: Tomcat 9
           Version: 9.0.74
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: regression
          Priority: P2
         Component: WebSocket
          Assignee: dev@tomcat.apache.org
          Reporter: boris_pet...@live.com
  Target Milestone: -----

I believe this is a regression from 9.0.73 - that is, I never encountered that
issue with 9.0.73 (which of course doesn't say that it wasn't there but with
9.0.74 it happens very often so...).

I think it's closely related to (or the same as) these:

https://bz.apache.org/bugzilla/show_bug.cgi?id=63191
https://bz.apache.org/bugzilla/show_bug.cgi?id=66531

The first issue I opened a few years ago. Then, around Tomcat 9.0.71 it stopped
appearing and all was fine. 9.0.72 seemed fine as well as 9.0.73. But now
9.0.74 seems to have introduced it again (or something new). Here are the
relevant stack traces:

-----------------

"thread name" #615 [2030] daemon prio=5 os_prio=0 cpu=667.09ms
elapsed=57804.86s tid=0x00007fc189c87000 nid=2030 waiting on condition 
[0x00007fc0bb57c000]
   java.lang.Thread.State: WAITING (parking)
        at jdk.internal.misc.Unsafe.park(java.base@19.0.2/Native Method)
        - parking to wait for  <0x0000000743e004f8> (a
java.util.concurrent.locks.ReentrantLock$NonfairSync)
        at
java.util.concurrent.locks.LockSupport.park(java.base@19.0.2/LockSupport.java:221)
        at
java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(java.base@19.0.2/AbstractQueuedSynchronizer.java:715)
        at
java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(java.base@19.0.2/AbstractQueuedSynchronizer.java:938)
        at
java.util.concurrent.locks.ReentrantLock$Sync.lock(java.base@19.0.2/ReentrantLock.java:153)
        at
java.util.concurrent.locks.ReentrantLock.lock(java.base@19.0.2/ReentrantLock.java:322)
        at org.apache.tomcat.websocket.WsSession.doClose(WsSession.java:654)
        at org.apache.tomcat.websocket.WsSession.doClose(WsSession.java:636)
        at org.apache.tomcat.websocket.WsSession.close(WsSession.java:624)
        at
org.cometd.server.websocket.javax.WebSocketEndPoint$Delegate.close(WebSocketEndPoint.java:119)
        at
org.cometd.server.websocket.common.AbstractWebSocketEndPoint.lambda$onMessage$0(AbstractWebSocketEndPoint.java:70)
        at
org.cometd.server.websocket.common.AbstractWebSocketEndPoint$$Lambda$1929/0x00000007c10e7078.accept(Unknown
Source)
        at org.cometd.bayeux.Promise$2.fail(Promise.java:108)
        at
org.cometd.server.websocket.common.AbstractWebSocketEndPoint$$Lambda$1953/0x00000007c111c440.accept(Unknown
Source)
        at org.cometd.bayeux.Promise$2.fail(Promise.java:108)
        at
org.cometd.server.websocket.common.AbstractWebSocketEndPoint$Entry.fail(AbstractWebSocketEndPoint.java:645)
        at
org.cometd.server.websocket.common.AbstractWebSocketEndPoint$Flusher.lambda$onCompleteFailure$0(AbstractWebSocketEndPoint.java:612)
        at
org.cometd.server.websocket.common.AbstractWebSocketEndPoint$Flusher$$Lambda$2642/0x00000007c13f9800.accept(Unknown
Source)
        at java.util.ArrayList.forEach(java.base@19.0.2/ArrayList.java:1511)
        at
org.cometd.server.websocket.common.AbstractWebSocketEndPoint$Flusher.onCompleteFailure(AbstractWebSocketEndPoint.java:612)
        at
org.eclipse.jetty.util.IteratingCallback.failed(IteratingCallback.java:417)
        at
org.cometd.server.websocket.javax.WebSocketEndPoint$Delegate.lambda$send$0(WebSocketEndPoint.java:106)
        at
org.cometd.server.websocket.javax.WebSocketEndPoint$Delegate$$Lambda$1954/0x00000007c111d438.onResult(Unknown
Source)
        at
org.apache.tomcat.websocket.WsRemoteEndpointImplBase$TextMessageSendHandler.onResult(WsRemoteEndpointImplBase.java:846)
        at
org.apache.tomcat.websocket.WsRemoteEndpointImplBase.endMessage(WsRemoteEndpointImplBase.java:442)
        at
org.apache.tomcat.websocket.WsRemoteEndpointImplBase$EndMessageHandler.onResult(WsRemoteEndpointImplBase.java:563)
        at
org.apache.tomcat.websocket.server.WsRemoteEndpointImplServer$OnResultRunnable.run(WsRemoteEndpointImplServer.java:395)
        at
org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
        at
org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
        at
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(java.base@19.0.2/Thread.java:1589)

   Locked ownable synchronizers:
        - <0x00000006cf2712d8> (a
org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker)

-----------------

"other thread name" #713 [2702] daemon prio=5 os_prio=0 cpu=523.94ms
elapsed=53545.41s tid=0x00007fc187e92000 nid=2702 waiting on condition 
[0x00007fc0c107c000]
   java.lang.Thread.State: WAITING (parking)
        at jdk.internal.misc.Unsafe.park(java.base@19.0.2/Native Method)
        - parking to wait for  <0x0000000743e008a8> (a
java.util.concurrent.CompletableFuture$Signaller)
        at
java.util.concurrent.locks.LockSupport.park(java.base@19.0.2/LockSupport.java:221)
        at
java.util.concurrent.CompletableFuture$Signaller.block(java.base@19.0.2/CompletableFuture.java:1864)
        at
java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@19.0.2/ForkJoinPool.java:3745)
        at
java.util.concurrent.ForkJoinPool.managedBlock(java.base@19.0.2/ForkJoinPool.java:3690)
        at
java.util.concurrent.CompletableFuture.waitingGet(java.base@19.0.2/CompletableFuture.java:1898)
        at
java.util.concurrent.CompletableFuture.get(java.base@19.0.2/CompletableFuture.java:2072)
        at
org.cometd.server.websocket.javax.WebSocketEndPoint.onMessage(WebSocketEndPoint.java:60)
        at
org.cometd.server.websocket.javax.WebSocketEndPoint.onMessage(WebSocketEndPoint.java:35)
        at
org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390)
        at
org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:129)
        at
org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484)
        at
org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284)
        at
org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130)
        at
org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:84)
        at
org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:183)
        at
org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:163)
        at
org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152)
        at
org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60)
        at
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57)
        at
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926)
        at
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791)
        at
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
        at
org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
        at
org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
        at
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(java.base@19.0.2/Thread.java:1589)

   Locked ownable synchronizers:
        - <0x000000070362a330> (a
org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker)
        - <0x0000000743e004f8> (a
java.util.concurrent.locks.ReentrantLock$NonfairSync)

-----------------

Not sure how to help more but I'm reverting to 7.0.73 for now. Let me know what
I can do.

-- 
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to