You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@mina.apache.org by "Emmanuel Lecharny (JIRA)" <ji...@apache.org> on 2014/11/10 06:38:34 UTC
[jira] [Issue Comment Deleted] (DIRMINA-995) Deadlock when using
SSL and proxy
[ https://issues.apache.org/jira/browse/DIRMINA-995?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Emmanuel Lecharny updated DIRMINA-995:
--------------------------------------
Comment: was deleted
(was: Ok, it's pretty clear. What happens is that you are receiving some data through an established SSL session, and your handler tries to close the session. This cause a deadlock because the flushScheduledEvents() method is called twice - as shown by the stack trace -, and enter twice into this section :
{code}
sslLock.lock();
try {
while ((event = filterWriteEventQueue.poll()) != null) {
NextFilter nextFilter = event.getNextFilter();
nextFilter.filterWrite(session, (WriteRequest) event.getParameter());
}
while ((event = messageReceivedEventQueue.poll()) != null) {
NextFilter nextFilter = event.getNextFilter();
nextFilter.messageReceived(session, event.getParameter());
}
} finally {
sslLock.unlock();
}
{code}
The second call obviously locks forever.
Can you provide the part of the handler which closes the session in your code ?
In any case, there is a clear race condition in MINA's code, and it has to be fixed.
Many thanks !)
> 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)