[ http://issues.apache.org/jira/browse/DIRMINA-169?page=comments#action_12368950 ]
Michael Link commented on DIRMINA-169: -------------------------------------- +1 for Niklas proposal. Also like start/stop better than startup/shutdown. To let the Worker threads live until the JVM terminates seems a little bit harsh. Would be nice when some of the guys would be released in times of inactivity. But this is probably better be looked at in the light of DIRMINA-184. > 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: Trustin Lee > 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
