Hi Guus,
thanks for teh full stack trace.
I've some concern about this blocked thread:
"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)
...
As you can see, there is a lock on a StreamManager instance following a
call to org.jivesoftware.openfire.session.La ocalSession.process:
public void process(Packet packet) {
// Check that the requested packet can be processed
if (canProcess(packet)) {
// Perform the actual processing of the packet. This
usually implies sending
// the packet to the entity
try {
// Invoke the interceptors before we send the packet
InterceptorManager.getInstance().invokeInterceptors(packet, this, false,
false);
deliver(packet);
<<<-------------------------------------Here
but I don't see why a lock is taken, unless I don't have the proper
source code.
Which version are you using when having this deadlock?
On 14/12/2022 09:37, Guus der Kinderen wrote:
Hi Emmanuel,
I was trying to be helpful by leaving out unimportant details, but I
seem to have messed up. A third thread is involved. I've now attached
the full thread dump to this email.
Kind regards,
Guus
On Mon, Dec 12, 2022 at 9:53 AM Emmanuel Lécharny <elecha...@gmail.com
<mailto:elecha...@gmail.com>> wrote:
Hi Guus,
there is something missing in the stacck trace: the two threads are
blocked on different monitors:
* SSLHandlerG0@99f49e2 owned by socket_c2s_ssl-thread-2
* StreamManager@7e024771 owned by TaskEngine-pool-3
they are not related, they are not blocking each one other.
Can you provide the full stack trace ?
Thanks !
On 09/12/2022 10:02, Guus der Kinderen wrote:
> 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
<http://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
<http://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)
>
--
*Emmanuel Lécharny - CTO* 205 Promenade des Anglais – 06200 NICE
T. +33 (0)4 89 97 36 50
P. +33 (0)6 08 33 32 61
emmanuel.lecha...@busit.com <mailto:emmanuel.lecha...@busit.com>
https://www.busit.com/ <https://www.busit.com/>
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@mina.apache.org
<mailto:users-unsubscr...@mina.apache.org>
For additional commands, e-mail: users-h...@mina.apache.org
<mailto:users-h...@mina.apache.org>
--
*Emmanuel Lécharny - CTO* 205 Promenade des Anglais – 06200 NICE
T. +33 (0)4 89 97 36 50
P. +33 (0)6 08 33 32 61
emmanuel.lecha...@busit.com https://www.busit.com/
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@mina.apache.org
For additional commands, e-mail: users-h...@mina.apache.org