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)

Reply via email to