[ http://issues.apache.org/jira/browse/DIRMINA-169?page=all ]
Niklas Therning reopened DIRMINA-169:
-------------------------------------
Assign To: Niklas Therning (was: Trustin Lee)
I've recently run into this bug myself I think. The fix doesn't seem to help.
It's a real showstopper since my SocketAcceptor hangs as well and no more
connections are accepted. I've reassigned the issue to me and I will
investigate further tonight. My thread dump:
"ThreadPoolWorker-9" prio=1 tid=0x0882f280 nid=0x281d waiting for monitor
entry [0x880f7000..0x880f7780]
at
org.apache.mina.common.support.IoFilterLifeCycleManager.decreaseCountSafely(IoFilterLifeCycleManager.java:182)
- waiting to lock <0x928b5590> (a
org.apache.mina.common.support.IoFilterLifeCycleManager)
at
org.apache.mina.common.support.IoFilterLifeCycleManager.callOnPostRemove(IoFilterLifeCycleManager.java:176)
at
org.apache.mina.common.support.AbstractIoFilterChain.deregister(AbstractIoFilterChain.java:358)
at
org.apache.mina.common.support.AbstractIoFilterChain.remove(AbstractIoFilterChain.java:295)
- locked <0x9787b1d8> (a
org.apache.mina.transport.socket.nio.support.SocketFilterChain)
at
org.apache.mina.common.support.AbstractIoFilterChain.clear(AbstractIoFilterChain.java:304)
- locked <0x9787b1d8> (a
org.apache.mina.transport.socket.nio.support.SocketFilterChain)
at
org.apache.mina.common.support.AbstractIoFilterChain$2.sessionClosed(AbstractIoFilterChain.java:168)
at
org.apache.mina.common.support.AbstractIoFilterChain.callNextSessionClosed(AbstractIoFilterChain.java:453)
at
org.apache.mina.common.support.AbstractIoFilterChain.access$700(AbstractIoFilterChain.java:52)
at
org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.sessionClosed(AbstractIoFilterChain.java:742)
at
org.apache.mina.filter.ThreadPoolFilter.processEvent(ThreadPoolFilter.java:687)
at
org.apache.mina.filter.ThreadPoolFilter$Worker.processEvents(ThreadPoolFilter.java:421)
at
org.apache.mina.filter.ThreadPoolFilter$Worker.run(ThreadPoolFilter.java:376)
"ThreadPoolWorker-8" prio=1 tid=0x8a5e1268 nid=0x281c in Object.wait()
[0x889ff000..0x889ff800]
at java.lang.Object.wait(Native Method)
- waiting on <0x97879a28> (a
org.apache.mina.filter.ThreadPoolFilter$Worker)
at java.lang.Thread.join(Thread.java:1103)
- locked <0x97879a28> (a org.apache.mina.filter.ThreadPoolFilter$Worker)
at
org.apache.mina.filter.ThreadPoolFilter.destroy(ThreadPoolFilter.java:209)
at
org.apache.mina.common.support.IoFilterLifeCycleManager.callDestroyIfNecessary(IoFilterLifeCycleManager.java:214)
- locked <0x928b5590> (a
org.apache.mina.common.support.IoFilterLifeCycleManager)
at
org.apache.mina.common.support.AbstractIoFilterChain.deregister(AbstractIoFilterChain.java:363)
at
org.apache.mina.common.support.AbstractIoFilterChain.remove(AbstractIoFilterChain.java:295)
- locked <0x9787be90> (a
org.apache.mina.transport.socket.nio.support.SocketFilterChain)
at
org.apache.mina.common.support.AbstractIoFilterChain.clear(AbstractIoFilterChain.java:304)
- locked <0x9787be90> (a
org.apache.mina.transport.socket.nio.support.SocketFilterChain)
at
org.apache.mina.common.support.AbstractIoFilterChain$2.sessionClosed(AbstractIoFilterChain.java:168)
at
org.apache.mina.common.support.AbstractIoFilterChain.callNextSessionClosed(AbstractIoFilterChain.java:453)
at
org.apache.mina.common.support.AbstractIoFilterChain.access$700(AbstractIoFilterChain.java:52)
at
org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.sessionClosed(AbstractIoFilterChain.java:742)
at
org.apache.mina.filter.ThreadPoolFilter.processEvent(ThreadPoolFilter.java:687)
at
org.apache.mina.filter.ThreadPoolFilter$Worker.processEvents(ThreadPoolFilter.java:421)
at
org.apache.mina.filter.ThreadPoolFilter$Worker.run(ThreadPoolFilter.java:376)
"SocketAcceptor-0" prio=1 tid=0x087b1cc0 nid=0x105d waiting for monitor entry
[0x8c6ff000..0x8c6ff680]
at
org.apache.mina.common.support.AbstractIoFilterChain.register(AbstractIoFilterChain.java:316)
- waiting to lock <0x928b5590> (a
org.apache.mina.common.support.IoFilterLifeCycleManager)
at
org.apache.mina.common.support.AbstractIoFilterChain.addLast(AbstractIoFilterChain.java:271)
- locked <0x9787c108> (a
org.apache.mina.transport.socket.nio.support.SocketFilterChain)
at
org.apache.mina.common.DefaultIoFilterChainBuilder.buildFilterChain(DefaultIoFilterChainBuilder.java:241)
at
org.apache.mina.transport.socket.nio.support.SocketAcceptorDelegate$Worker.processSessions(SocketAcceptorDelegate.java:411)
> Deadlock in ThreadPoolFilter
> ----------------------------
>
> Key: DIRMINA-169
> URL: http://issues.apache.org/jira/browse/DIRMINA-169
> Project: Directory MINA
> Type: Bug
> Versions: 0.9
> Reporter: Rurik Krylov
> Assignee: Niklas Therning
> Fix For: 0.9.2
>
> The dedlock occurs in case of simultaniously closing sessions. You can find
> thread dumps below.
> When 2 threads reach synchronized method callDestroyIfNecessary, reference
> count is 0 already. So first thread tries to interrupt() second worker, but
> it cannot be interrupted because it is lying on the synch block.
> I'm not familar with this architecture, but from my point of of view
> ThreadPoolFilter as singleton should not have too many synchronized methods.
> In this particular case, synchronization of method callDestroyIfNecessary
> should be narrowed to synchronisztion collection operations only.
> filter.destroy() need not of synchronisation, and just it causes the deadlock.
> [EMAIL PROTECTED] prio=5, in group "main", status: WAIT
> blocks [EMAIL PROTECTED]
> blocks [EMAIL PROTECTED]
> wait():-1, Object.java
> join():1103, Thread.java
> destroy():209, ThreadPoolFilter.java
> callDestroyIfNecessary():171, IoFilterLifeCycleManager.java
> deregister():363, AbstractIoFilterChain.java
> remove():295, AbstractIoFilterChain.java
> clear():304, AbstractIoFilterChain.java
> sessionClosed():168, AbstractIoFilterChain.java
> callNextSessionClosed():453, AbstractIoFilterChain.java
> access$700():52, AbstractIoFilterChain.java
> sessionClosed():742, AbstractIoFilterChain.java
> sessionClosed():165, ProtocolCodecFilter.java
> callNextSessionClosed():453, AbstractIoFilterChain.java
> access$700():52, AbstractIoFilterChain.java
> sessionClosed():742, AbstractIoFilterChain.java
> processEvent():687, ThreadPoolFilter.java
> processEvents():421, ThreadPoolFilter.java
> run():376, ThreadPoolFilter.java
> [EMAIL PROTECTED] prio=5, in group "main", status: MONITOR
> waiting for [EMAIL PROTECTED]
> callDestroyIfNecessary():160, IoFilterLifeCycleManager.java
> deregister():363, AbstractIoFilterChain.java
> remove():295, AbstractIoFilterChain.java
> clear():304, AbstractIoFilterChain.java
> sessionClosed():168, AbstractIoFilterChain.java
> callNextSessionClosed():453, AbstractIoFilterChain.java
> access$700():52, AbstractIoFilterChain.java
> sessionClosed():742, AbstractIoFilterChain.java
> sessionClosed():165, ProtocolCodecFilter.java
> callNextSessionClosed():453, AbstractIoFilterChain.java
> access$700():52, AbstractIoFilterChain.java
> sessionClosed():742, AbstractIoFilterChain.java
> processEvent():687, ThreadPoolFilter.java
> processEvents():421, ThreadPoolFilter.java
> run():376, ThreadPoolFilter.java
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira