James, People have reported deadlocks in SSLFilter before. We are using the SSLFilter for one and a half year without issues, but that's probably because we're not writing to the IoSession from multiple threads simultaneously.
Trustin has fixed at least two bugs in SSLFilter since 2007-06-11 therefor I suggest you try with the latest release mina-1.1.1 which was released on July 18th, 2007. https://issues.apache.org/jira/browse/DIRMINA-390 https://issues.apache.org/jira/browse/DIRMINA-402 By the way, the version of jconsole that comes with jdk1.6 has a "Detect Deadlock" button, have you tried that ? Maarten On 7/27/07, James Gould <[EMAIL PROTECTED]> wrote: > > > I've deployed a Mina-based SSL Gateway that uses a remote client > IoAcceptor > with the SSLFilter, called the source channel, linked to an IoConnector > that > does not include the SSLFilter, called the destination channel, to TCP > communicate to a back-end Application Server. The IoSession of the source > and destination channels are held in a PipedSession where the source can > push packets to the destination and vice-versa. We're coming across a > synchronization issue, where the Gateway will run for over an hour and > than > will lock up. We incorporated the ExecutorFilter for both the source and > destination to reduce the likelihood of the lock up, but it eventually > will > lock up the threads in the source and destination thread pools. > > We've taken a thread dump of the Gateway in the bad state and the > following > is a typical scenario, where the client might be pipelining. In > pipelining, > the client could send packets without waiting for the response of each > packet. What we see is the source decrypting the request packet and the > destination attempting to get a lock on the SSLHandler to encrypt the > response back to the client. The issue is that the source is waiting on a > lock in the SSLEngineImpl.unwrap of the Sun JDK 6.0 U2. The thread dump > does not show who has the SSLEngineImpl.unwrap lock, but I believe that > whoever has the lock can't release it due to a deadlock scenario. An > example of the thread dump entries of the scenario are included. I'm > reviewing the SSLFilter and SSLHandler, I'm not sure what code path could > cause such a scenario. > > To note, we're running Mina 1.1.0 with > mina-filter-ssl-1.1.1-20070611.145558-5.jar, since using the > mina-filter-1.1.0.jar caused lockup issues with the SSL handshake. We > deployed mina-filter-ssl-1.1.1-20070611.145558-5.jar to address the SSL > handshake induced lockup. > > Is anyone else have similar SSL synchronization/deadlock issues? Any > ideas > or suggestions is greatly appreciated. > > The thread dump does not include what thread has the lock for < 0x94f12f98 > >. > > "pool-2-thread-9" prio=10 tid=0x083f6c00 nid=0x2b7a runnable > [0x8f445000..0x8f4461b0] > java.lang.Thread.State: RUNNABLE > at > com.sun.net.ssl.internal.ssl.SSLEngineImpl.unwrap(SSLEngineImpl.java:667) > - waiting to lock <0x94f12f98> (a java.lang.Object) > at javax.net.ssl.SSLEngine.unwrap(SSLEngine.java:607) > at org.apache.mina.filter.support.SSLHandler.unwrap( > SSLHandler.java:659) > at org.apache.mina.filter.support.SSLHandler.decrypt( > SSLHandler.java:465) > at > org.apache.mina.filter.support.SSLHandler.messageReceived(SSLHandler.java > :334) > at org.apache.mina.filter.SSLFilter.messageReceived(SSLFilter.java > :411) > - locked <0x94f12c10> (a org.apache.mina.filter.support.SSLHandler) > at > > org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived > (AbstractIoFilterChain.java:362) > at > org.apache.mina.common.support.AbstractIoFilterChain.access$1100( > AbstractIoFilterChain.java:54) > at > > org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived > (AbstractIoFilterChain.java:800) > at > org.apache.mina.common.IoFilterAdapter.messageReceived( > IoFilterAdapter.java:83) > at > > org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived > (AbstractIoFilterChain.java:362) > at > org.apache.mina.common.support.AbstractIoFilterChain.access$1100( > AbstractIoFilterChain.java:54) > at > > org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived > (AbstractIoFilterChain.java:800) > at > org.apache.mina.filter.executor.ExecutorFilter.processEvent( > ExecutorFilter.java:247) > at > org.apache.mina.filter.executor.ExecutorFilter$ProcessEventsRunnable.run( > ExecutorFilter.java:307) > at > java.util.concurrent.ThreadPoolExecutor$Worker.runTask( > ThreadPoolExecutor.java:885) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java > :907) > at java.lang.Thread.run(Thread.java:619) > > "pool-4-thread-33" prio=10 tid=0x083c3800 nid=0x2bef waiting for monitor > entry [0x8e056000..0x8e0570b0] > java.lang.Thread.State: BLOCKED (on object monitor) > at org.apache.mina.filter.SSLFilter.filterWrite(SSLFilter.java > :478) > - waiting to lock <0x94f12c10> (a > org.apache.mina.filter.support.SSLHandler) > at > > org.apache.mina.common.support.AbstractIoFilterChain.callPreviousFilterWrite > (AbstractIoFilterChain.java:445) > at > org.apache.mina.common.support.AbstractIoFilterChain.access$1400( > AbstractIoFilterChain.java:54) > at > > org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.filterWrite > (AbstractIoFilterChain.java:824) > at > com.verisign.mina.filter.SetSessionIdInLogFilter.filterWrite( > SetSessionIdInLogFilter.java:102) > at > > org.apache.mina.common.support.AbstractIoFilterChain.callPreviousFilterWrite > (AbstractIoFilterChain.java:445) > at > org.apache.mina.common.support.AbstractIoFilterChain.access$1400( > AbstractIoFilterChain.java:54) > at > > org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.filterWrite > (AbstractIoFilterChain.java:824) > at > org.apache.mina.filter.codec.ProtocolCodecFilter.filterWrite( > ProtocolCodecFilter.java:227) > at > > org.apache.mina.common.support.AbstractIoFilterChain.callPreviousFilterWrite > (AbstractIoFilterChain.java:445) > at > org.apache.mina.common.support.AbstractIoFilterChain.access$1400( > AbstractIoFilterChain.java:54) > at > > org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.filterWrite > (AbstractIoFilterChain.java:824) > at > > org.apache.mina.common.support.AbstractIoFilterChain$TailFilter.filterWrite > (AbstractIoFilterChain.java:727) > at > > org.apache.mina.common.support.AbstractIoFilterChain.callPreviousFilterWrite > (AbstractIoFilterChain.java:445) > at > org.apache.mina.common.support.AbstractIoFilterChain.fireFilterWrite( > AbstractIoFilterChain.java:436) > at > org.apache.mina.transport.socket.nio.SocketSessionImpl.write0( > SocketSessionImpl.java:196) > at > org.apache.mina.common.support.BaseIoSession.write(BaseIoSession.java:149) > at > org.apache.mina.common.support.BaseIoSession.write(BaseIoSession.java:135) > at > com.verisign.cag.protocol.common.PipedSession.write(PipedSession.java:78) > at > com.verisign.cag.protocol.common.SourceSession.write(SourceSession.java > :371) > at > com.verisign.cag.protocol.common.SourceSession.messageReceived( > SourceSession.java:245) > at > com.verisign.cag.protocol.srsepp.SRSEPPDestinationHandler.messageReceived( > SRSEPPDestinationHandler.java:68) > at > com.verisign.cag.protocol.srsepp.SRSEPPDestinationHandler.messageReceived( > SRSEPPDestinationHandler.java:48) > at > > org.apache.mina.common.support.AbstractIoFilterChain$TailFilter.messageReceived > (AbstractIoFilterChain.java:703) > at > > org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived > (AbstractIoFilterChain.java:362) > at > org.apache.mina.common.support.AbstractIoFilterChain.access$1100( > AbstractIoFilterChain.java:54) > at > > org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived > (AbstractIoFilterChain.java:800) > at > org.apache.mina.filter.codec.support.SimpleProtocolDecoderOutput.flush( > SimpleProtocolDecoderOutput.java:62) > at > org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived( > ProtocolCodecFilter.java:200) > at > > org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived > (AbstractIoFilterChain.java:362) > at > org.apache.mina.common.support.AbstractIoFilterChain.access$1100( > AbstractIoFilterChain.java:54) > at > > org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived > (AbstractIoFilterChain.java:800) > at > com.verisign.mina.filter.SetSessionIdInLogFilter.messageReceived( > SetSessionIdInLogFilter.java:84) > at > > org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived > (AbstractIoFilterChain.java:362) > at > org.apache.mina.common.support.AbstractIoFilterChain.access$1100( > AbstractIoFilterChain.java:54) > at > > org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived > (AbstractIoFilterChain.java:800) > at > org.apache.mina.filter.executor.ExecutorFilter.processEvent( > ExecutorFilter.java:247) > at > org.apache.mina.filter.executor.ExecutorFilter$ProcessEventsRunnable.run( > ExecutorFilter.java:307) > at > java.util.concurrent.ThreadPoolExecutor$Worker.runTask( > ThreadPoolExecutor.java:885) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java > :907) > at java.lang.Thread.run(Thread.java:619) > > > -- > View this message in context: > http://www.nabble.com/Deadlock-with-Mina-based-SSL-Gateway-tf4159854s16868.html#a11835745 > Sent from the Apache MINA Support Forum mailing list archive at Nabble.com > . > >
