You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@directory.apache.org by "Rurik Krylov (JIRA)" <ji...@apache.org> on 2006/02/03 16:37:11 UTC

[jira] Created: (DIRMINA-169) Deadlock in ThreadPoolFilter

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


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.

IoThreadPool-3@547 prio=5, in group "main", status: WAIT
	 blocks IoThreadPool-1@548
	 blocks SocketAcceptor-0@4e9
	  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

IoThreadPool-1@548 prio=5, in group "main", status: MONITOR
	 waiting for IoThreadPool-3@547
	  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