[ 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

Reply via email to