[
https://issues.apache.org/jira/browse/DIRMINA-995?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14204383#comment-14204383
]
yzb81 commented on DIRMINA-995:
-------------------------------
I think the true reason of the deadlock is that the established SSL session
read data from socket, and my handler write data to the session at the same
time. please see the "NioProcessor-3" and "Thread-102" in my last comment.
this is the closing session code section, just seems ok.
IoSession tempSession = getSession();
if(tempSession != null && tempSession.isConnected())
{
tempSession.close(true);
}
> Deadlock when using SSL and proxy
> ---------------------------------
>
> Key: DIRMINA-995
> URL: https://issues.apache.org/jira/browse/DIRMINA-995
> Project: MINA
> Issue Type: Bug
> Components: Filter
> Affects Versions: 2.0.7
> Environment: JRE 1.6, Linux
> Reporter: yzb81
>
> I write a SSL client to connect server through SOCKS5 proxy, then meet a
> deadlock.
> Maybe the reason of deadlock is I write data to a IoSession in my main
> thread, but now this session is reading data from socket.
> Found one Java-level deadlock:
> =============================
> "NioProcessor-7":
> waiting to lock monitor 0x0940a8a8 (object 0x98732818, a
> org.apache.mina.filter.ssl.SslHandler),
> which is held by "Thread-102"
> "Thread-102":
> waiting to lock monitor 0x09e8128c (object 0x9873d750, a
> org.apache.mina.proxy.handlers.socks.Socks5LogicHandler),
> which is held by "NioProcessor-7"
> Java stack information for the threads listed above:
> ===================================================
> "NioProcessor-7":
> at org.apache.mina.filter.ssl.SslFilter.filterWrite(SslFilter.java:576)
> - waiting to lock <0x98732818> (a org.apache.mina.filter.ssl.SslHandler)
> at
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:482)
> at
> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1400(DefaultIoFilterChain.java:47)
> at
> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.filterWrite(DefaultIoFilterChain.java:775)
> at
> org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.filterWrite(DefaultIoFilterChain.java:705)
> at
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:482)
> at
> org.apache.mina.core.filterchain.DefaultIoFilterChain.fireFilterWrite(DefaultIoFilterChain.java:475)
> at
> org.apache.mina.core.session.AbstractIoSession.write(AbstractIoSession.java:494)
> at
> org.apache.mina.core.session.AbstractIoSession.write(AbstractIoSession.java:439)
> at xxx.xxxProxyHandler.messageReceived(xxxProxyHandler.java:74)
> at
> org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.messageReceived(DefaultIoFilterChain.java:690)
> at
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:417)
> at
> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:47)
> at
> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:765)
> at
> org.apache.mina.filter.ssl.SslHandler.flushScheduledEvents(SslHandler.java:322)
> at
> org.apache.mina.filter.ssl.SslFilter.messageReceived(SslFilter.java:497)
> at
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:417)
> at
> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:47)
> at
> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:765)
> at
> org.apache.mina.proxy.filter.ProxyFilter.messageReceived(ProxyFilter.java:153)
> - locked <0x9873d750> (a
> org.apache.mina.proxy.handlers.socks.Socks5LogicHandler)
> at
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:417)
> at
> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:47)
> at
> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:765)
> at
> org.apache.mina.core.filterchain.IoFilterAdapter.messageReceived(IoFilterAdapter.java:109)
> at
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:417)
> at
> org.apache.mina.core.filterchain.DefaultIoFilterChain.fireMessageReceived(DefaultIoFilterChain.java:410)
> at
> org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIoProcessor.java:710)
> at
> org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:664)
> at
> org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:653)
> at
> org.apache.mina.core.polling.AbstractPollingIoProcessor.access$600(AbstractPollingIoProcessor.java:67)
> at
> org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:1124)
> at
> org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64)
> at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown
> Source)
> at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
> at java.lang.Thread.run(Unknown Source)
> "Thread-102":
> at
> org.apache.mina.proxy.filter.ProxyFilter.writeData(ProxyFilter.java:209)
> - waiting to lock <0x9873d750> (a
> org.apache.mina.proxy.handlers.socks.Socks5LogicHandler)
> at
> org.apache.mina.proxy.filter.ProxyFilter.filterWrite(ProxyFilter.java:192)
> at
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:482)
> at
> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1400(DefaultIoFilterChain.java:47)
> at
> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.filterWrite(DefaultIoFilterChain.java:775)
> at
> org.apache.mina.filter.ssl.SslHandler.flushScheduledEvents(SslHandler.java:316)
> - locked <0x98732818> (a org.apache.mina.filter.ssl.SslHandler)
> at org.apache.mina.filter.ssl.SslFilter.filterWrite(SslFilter.java:609)
> at
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:482)
> at
> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1400(DefaultIoFilterChain.java:47)
> at
> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.filterWrite(DefaultIoFilterChain.java:775)
> at
> org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.filterWrite(DefaultIoFilterChain.java:705)
> at
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:482)
> at
> org.apache.mina.core.filterchain.DefaultIoFilterChain.fireFilterWrite(DefaultIoFilterChain.java:475)
> at
> org.apache.mina.core.session.AbstractIoSession.write(AbstractIoSession.java:494)
> at
> org.apache.mina.core.session.AbstractIoSession.write(AbstractIoSession.java:439)
> at xxx.run(xxx.java:219)
> at java.lang.Thread.run(Unknown Source)
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)