Hello, I wonder if MINA 2.2.1 introduces a new potential for deadlock in its SSLHandler implementation. Did something change there, as compared to MINA 2.1.3?
Since this upgrade, we consistently run into a thread deadlock. One of the threads that is deadlocking is sending data to the peer, while the other is processing data from the peer. The deadlock involves a MINA-based lock (in SSLHandler), and a lock in our code (StreamManager), that is responsible for recording what packets that are exchanged have been acknowledged by the peer. The latter did not change, so I'm suspecting a change in SSLHandler. The stack traces of two deadlocked threads are added to this email. Kind regards, Guus "TaskEngine-pool-3" #40 daemon prio=5 waiting on lock java.lang.Thread.State: BLOCKED - blocked on org.apache.mina.filter.ssl.SSLHandlerG0@99f49e2 (owned by socket_c2s_ssl-thread-2 id=78) at org.apache.mina.filter.ssl.SSLHandlerG0.write(SSLHandlerG0.java:312) at org.apache.mina.filter.ssl.SslFilter.filterWrite(SslFilter.java:380) at org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:753) at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1500(DefaultIoFilterChain.java:49) at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.filterWrite(DefaultIoFilterChain.java:1146) at org.apache.mina.filter.codec.ProtocolCodecFilter.filterWrite(ProtocolCodecFilter.java:301) at org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:753) at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1500(DefaultIoFilterChain.java:49) at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.filterWrite(DefaultIoFilterChain.java:1146) at org.apache.mina.core.filterchain.IoFilterAdapter.filterWrite(IoFilterAdapter.java:138) at org.jivesoftware.openfire.net.StalledSessionsFilter.filterWrite(StalledSessionsFilter.java:61) at org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:753) at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1500(DefaultIoFilterChain.java:49) at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.filterWrite(DefaultIoFilterChain.java:1146) at org.apache.mina.core.filterchain.IoFilterAdapter.filterWrite(IoFilterAdapter.java:138) at org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:753) at org.apache.mina.core.filterchain.DefaultIoFilterChain.fireFilterWrite(DefaultIoFilterChain.java:746) at org.apache.mina.core.session.AbstractIoSession.write(AbstractIoSession.java:575) at org.apache.mina.core.session.AbstractIoSession.write(AbstractIoSession.java:520) at org.jivesoftware.openfire.nio.NIOConnection.deliver(NIOConnection.java:349) at org.jivesoftware.openfire.session.LocalClientSession.deliver(LocalClientSession.java:928) - locked org.jivesoftware.openfire.streammanagement.StreamManager@7e024771 at org.jivesoftware.openfire.session.LocalSession.process(LocalSession.java:407) at org.jivesoftware.openfire.spi.RoutingTableImpl.routeToLocalDomain(RoutingTableImpl.java:439) at org.jivesoftware.openfire.spi.RoutingTableImpl.routePacket(RoutingTableImpl.java:350) at org.jivesoftware.openfire.IQRouter.handle(IQRouter.java:426) at org.jivesoftware.openfire.IQRouter.route(IQRouter.java:106) at org.jivesoftware.openfire.spi.PacketRouterImpl.route(PacketRouterImpl.java:74) at org.jivesoftware.openfire.pubsub.PubSubEngine.publishItemsToNode(PubSubEngine.java:428) at org.jivesoftware.openfire.pubsub.PubSubEngine$1.run(PubSubEngine.java:96) at java.base@11.0.17 /java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) at java.base@11.0.17 /java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base@11.0.17 /java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base@11.0.17 /java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base@11.0.17/java.lang.Thread.run(Thread.java:829) "socket_c2s_ssl-thread-2" #78 daemon prio=5 waiting on lock java.lang.Thread.State: BLOCKED - blocked on org.jivesoftware.openfire.streammanagement.StreamManager@7e024771 (owned by TaskEngine-pool-3 id=40) at org.jivesoftware.openfire.streammanagement.StreamManager.processClientAcknowledgement(StreamManager.java:493) at org.jivesoftware.openfire.streammanagement.StreamManager.process(StreamManager.java:185) at org.jivesoftware.openfire.net.StanzaHandler.process(StanzaHandler.java:223) at org.jivesoftware.openfire.nio.ConnectionHandler.messageReceived(ConnectionHandler.java:178) at org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.messageReceived(DefaultIoFilterChain.java:1015) at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:650) at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1300(DefaultIoFilterChain.java:49) at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:1128) at org.apache.mina.core.filterchain.IoFilterAdapter.messageReceived(IoFilterAdapter.java:122) at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:650) at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1300(DefaultIoFilterChain.java:49) at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:1128) at org.apache.mina.filter.codec.AbstractProtocolDecoderOutput.flush(AbstractProtocolDecoderOutput.java:64) at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:249) at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:650) at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1300(DefaultIoFilterChain.java:49) at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:1128) at org.apache.mina.filter.ssl.SSLHandlerG0.receive_loop(SSLHandlerG0.java:236) at org.apache.mina.filter.ssl.SSLHandlerG0.receive(SSLHandlerG0.java:162) - locked org.apache.mina.filter.ssl.SSLHandlerG0@99f49e2 at org.apache.mina.filter.ssl.SslFilter.messageReceived(SslFilter.java:342) at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:650) at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1300(DefaultIoFilterChain.java:49) at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:1128) at org.apache.mina.core.filterchain.IoFilterEvent.fire(IoFilterEvent.java:106) at org.apache.mina.core.session.IoEvent.run(IoEvent.java:89) at org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTask(OrderedThreadPoolExecutor.java:763) at org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTasks(OrderedThreadPoolExecutor.java:755) at org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.run(OrderedThreadPoolExecutor.java:695) at java.base@11.0.17/java.lang.Thread.run(Thread.java:829)