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