You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@mina.apache.org by "Jay Erb (JIRA)" <ji...@apache.org> on 2006/11/04 04:28:17 UTC

[jira] Commented: (DIRMINA-195) Deadlock in ADS

    [ http://issues.apache.org/jira/browse/DIRMINA-195?page=comments#action_12447112 ] 
            
Jay Erb commented on DIRMINA-195:
---------------------------------

I'm seeing a very similar stack trace to yours and it does result in a problem. I'm running version 0.7.3 - I know, it's very old, but we're close to releasing our product and want to keep changes to a minimum.
In both of our stack traces, there is only one IoThread that is waiting for an event. All the rest of the IoThreads are waiting for promotion. This means there is only one leader in the thread pool. This means that we'll never get any data up to the session level because we're missing a leader either in the IoThreadPoolFilter or the ProtocolThreadPoolFilter.
I haven't been able to reproduce the problem consistently, but it has happened a few times in a live network. While monitoring thread dumps when my system was in this state, I did see an IoThread get promoted to lead and another IoThread get created and waiting for promotion. This leads me to believe that there is only one threadpoolfilter active. It Must be the IoThreadPoolFilter because the only way the ProtocolThreadPoolFilter will get any work is if the IoThreadPoolfilter is working. Does anyone have any thoughts (other than upgrade)?

> Deadlock in ADS
> ---------------
>
>                 Key: DIRMINA-195
>                 URL: http://issues.apache.org/jira/browse/DIRMINA-195
>             Project: Directory MINA
>          Issue Type: Bug
>    Affects Versions: 0.9.2
>            Reporter: Emmanuel Lecharny
>            Priority: Blocker
>
> Hi all Mina's gurus,
> we have a deadlock situation in ADS when launching tests with more than one client thread. Here is the thread dump I get :
> "IoThreadPool-11" prio=1 tid=0x08b11278 nid=0x1d12 in Object.wait() [0xb06a5000..0xb06a5e30]
> 	at java.lang.Object.wait(Native Method)
> 	at org.apache.mina.filter.ThreadPoolFilter$Worker.waitForPromotion(ThreadPoolFilter.java:493)
> 	- locked <0x7e5e7a70> (a java.lang.Object)
> 	at org.apache.mina.filter.ThreadPoolFilter$Worker.run(ThreadPoolFilter.java:366)
> "IoThreadPool-10" prio=1 tid=0x08b0f330 nid=0x1d11 in Object.wait() [0xb0727000..0xb07271b0]
> 	at java.lang.Object.wait(Native Method)
> 	at org.apache.mina.filter.ThreadPoolFilter$Worker.waitForPromotion(ThreadPoolFilter.java:493)
> 	- locked <0x7e5019a8> (a java.lang.Object)
> 	at org.apache.mina.filter.ThreadPoolFilter$Worker.run(ThreadPoolFilter.java:366)
> "IoThreadPool-9" prio=1 tid=0x08b0e450 nid=0x1d10 in Object.wait() [0xb07a7000..0xb07a8130]
> 	at java.lang.Object.wait(Native Method)
> 	at org.apache.mina.filter.ThreadPoolFilter$Worker.waitForPromotion(ThreadPoolFilter.java:493)
> 	- locked <0x7e4b4ea0> (a java.lang.Object)
> 	at org.apache.mina.filter.ThreadPoolFilter$Worker.run(ThreadPoolFilter.java:366)
> "IoThreadPool-8" prio=1 tid=0x08a63d18 nid=0x1d0f in Object.wait() [0xb0828000..0xb08290b0]
> 	at java.lang.Object.wait(Native Method)
> 	at org.apache.mina.filter.ThreadPoolFilter$Worker.waitForPromotion(ThreadPoolFilter.java:493)
> 	- locked <0x7e41b558> (a java.lang.Object)
> 	at org.apache.mina.filter.ThreadPoolFilter$Worker.run(ThreadPoolFilter.java:366)
> "IoThreadPool-7" prio=1 tid=0x08a61c98 nid=0x1d0a in Object.wait() [0xb08a9000..0xb08aa030]
> 	at java.lang.Object.wait(Native Method)
> 	at org.apache.mina.filter.ThreadPoolFilter$Worker.waitForPromotion(ThreadPoolFilter.java:493)
> 	- locked <0x7e2e5c28> (a java.lang.Object)
> 	at org.apache.mina.filter.ThreadPoolFilter$Worker.run(ThreadPoolFilter.java:366)
> "IoThreadPool-6" prio=1 tid=0x08a5ebb0 nid=0x1d07 in Object.wait() [0xb092a000..0xb092afb0]
> 	at java.lang.Object.wait(Native Method)
> 	at org.apache.mina.filter.ThreadPoolFilter$Worker.waitForPromotion(ThreadPoolFilter.java:493)
> 	- locked <0x7e24bf60> (a java.lang.Object)
> 	at org.apache.mina.filter.ThreadPoolFilter$Worker.run(ThreadPoolFilter.java:366)
> "IoThreadPool-5" prio=1 tid=0x08b02dc0 nid=0x1d05 in Object.wait() [0xb09ab000..0xb09abf30]
> 	at java.lang.Object.wait(Native Method)
> 	at org.apache.mina.filter.ThreadPoolFilter$Worker.waitForPromotion(ThreadPoolFilter.java:493)
> 	- locked <0x7e1b2b28> (a java.lang.Object)
> 	at org.apache.mina.filter.ThreadPoolFilter$Worker.run(ThreadPoolFilter.java:366)
> "IoThreadPool-4" prio=1 tid=0x08b03bd0 nid=0x1d03 in Object.wait() [0xb0a2c000..0xb0a2ceb0]
> 	at java.lang.Object.wait(Native Method)
> 	at org.apache.mina.filter.ThreadPoolFilter$Worker.waitForPromotion(ThreadPoolFilter.java:493)
> 	- locked <0x7e1649f0> (a java.lang.Object)
> 	at org.apache.mina.filter.ThreadPoolFilter$Worker.run(ThreadPoolFilter.java:366)
> "IoThreadPool-3" prio=1 tid=0x08e33ab8 nid=0x3b75 in Object.wait() [0xb0aad000..0xb0aae030]
> 	at java.lang.Object.wait(Native Method)
> 	at java.lang.Object.wait(Object.java:474)
> 	at org.apache.mina.util.BlockingQueue.waitForNewItem(BlockingQueue.java:55)
> 	- locked <0x7de638f0> (a org.apache.mina.util.BlockingQueue)
> 	at org.apache.mina.filter.ThreadPoolFilter$Worker.fetchBuffer(ThreadPoolFilter.java:394)
> 	- locked <0x7de638f0> (a org.apache.mina.util.BlockingQueue)
> 	at org.apache.mina.filter.ThreadPoolFilter$Worker.run(ThreadPoolFilter.java:369)
> "IoThreadPool-2" prio=1 tid=0x08b02270 nid=0x1cf1 in Object.wait() [0xb0bb0000..0xb0bb01b0]
> 	at java.lang.Object.wait(Native Method)
> 	at org.apache.mina.filter.ThreadPoolFilter$Worker.waitForPromotion(ThreadPoolFilter.java:493)
> 	- locked <0x7e116bf8> (a java.lang.Object)
> 	at org.apache.mina.filter.ThreadPoolFilter$Worker.run(ThreadPoolFilter.java:366)
> "IoThreadPool-1" prio=1 tid=0x08b037a8 nid=0x1d01 in Object.wait() [0xb0b2e000..0xb0b2ee30]
> 	at java.lang.Object.wait(Native Method)
> 	at org.apache.mina.filter.ThreadPoolFilter$Worker.waitForPromotion(ThreadPoolFilter.java:493)
> 	- locked <0x7e119190> (a java.lang.Object)
> 	at org.apache.mina.filter.ThreadPoolFilter$Worker.run(ThreadPoolFilter.java:366)
> "SocketIoProcessor-0" prio=1 tid=0x08f21b50 nid=0x3b35 runnable [0xb0c30000..0xb0c30eb0]
> 	at sun.nio.ch.PollArrayWrapper.poll0(Native Method)
> 	at sun.nio.ch.PollArrayWrapper.poll(PollArrayWrapper.java:100)
> 	at sun.nio.ch.PollSelectorImpl.doSelect(PollSelectorImpl.java:56)
> 	at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:69)
> 	- locked <0x7e0f3ac0> (a sun.nio.ch.Util$1)
> 	- locked <0x7e0f3ad0> (a java.util.Collections$UnmodifiableSet)
> 	- locked <0x7e0f3a70> (a sun.nio.ch.PollSelectorImpl)
> 	at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:80)
> 	at org.apache.mina.transport.socket.nio.support.SocketIoProcessor$Worker.run(SocketIoProcessor.java:621)
> "DestroyJavaVM" prio=1 tid=0x08a108a0 nid=0x3b13 waiting on condition [0x00000000..0xbfe4d680]
> "SynchWorkerThread" prio=1 tid=0x08f25d20 nid=0x3b24 in Object.wait() [0xb0cb1000..0xb0cb2030]
> 	at java.lang.Object.wait(Native Method)
> 	- waiting on <0x7ddfa820> (a java.lang.Object)
> 	at org.apache.directory.server.Service$SynchWorker.run(Service.java:155)
> 	- locked <0x7ddfa820> (a java.lang.Object)
> 	at java.lang.Thread.run(Thread.java:595)
> "SocketAcceptor-0" prio=1 tid=0x08f1b8e8 nid=0x3b23 runnable [0xb0d32000..0xb0d32fb0]
> 	at sun.nio.ch.PollArrayWrapper.poll0(Native Method)
> 	at sun.nio.ch.PollArrayWrapper.poll(PollArrayWrapper.java:100)
> 	at sun.nio.ch.PollSelectorImpl.doSelect(PollSelectorImpl.java:56)
> 	at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:69)
> 	- locked <0x7e093b50> (a sun.nio.ch.Util$1)
> 	- locked <0x7e099140> (a java.util.Collections$UnmodifiableSet)
> 	- locked <0x7e0963a0> (a sun.nio.ch.PollSelectorImpl)
> 	at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:80)
> 	at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:84)
> 	at org.apache.mina.transport.socket.nio.support.SocketAcceptorDelegate$Worker.run(SocketAcceptorDelegate.java:326)
> "Low Memory Detector" daemon prio=1 tid=0x08a57370 nid=0x3b1e runnable [0x00000000..0x00000000]
> "CompilerThread0" daemon prio=1 tid=0x08a55e10 nid=0x3b1d waiting on condition [0x00000000..0xb20cb818]
> "Signal Dispatcher" daemon prio=1 tid=0x08a54e38 nid=0x3b1c runnable [0x00000000..0x00000000]
> "Finalizer" daemon prio=1 tid=0x08a4f348 nid=0x3b1a in Object.wait() [0xb23cd000..0xb23ce130]
> 	at java.lang.Object.wait(Native Method)
> 	- waiting on <0x7ddca718> (a java.lang.ref.ReferenceQueue$Lock)
> 	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116)
> 	- locked <0x7ddca718> (a java.lang.ref.ReferenceQueue$Lock)
> 	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:132)
> 	at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)
> "Reference Handler" daemon prio=1 tid=0x08a4d4b8 nid=0x3b19 in Object.wait() [0xb244e000..0xb244f0b0]
> 	at java.lang.Object.wait(Native Method)
> 	- waiting on <0x7ddca798> (a java.lang.ref.Reference$Lock)
> 	at java.lang.Object.wait(Object.java:474)
> 	at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)
> 	- locked <0x7ddca798> (a java.lang.ref.Reference$Lock)
> "VM Thread" prio=1 tid=0x08a4a968 nid=0x3b18 runnable 
> "VM Periodic Task Thread" prio=1 tid=0x08a58810 nid=0x3b1f waiting on condition 
> And here is a jstack trace too :
> Thread 15221: (state = BLOCKED)
>  - java.lang.Object.wait(long) @bci=0 (Compiled frame; information may be imprecise)
>  - java.lang.Object.wait() @bci=2, line=474 (Compiled frame)
>  - org.apache.mina.filter.ThreadPoolFilter$Worker.fetchBuffer() @bci=23, line=394 (Compiled frame)
>  - org.apache.mina.filter.ThreadPoolFilter$Worker.run() @bci=11, line=369 (Compiled frame)
> Thread 15157: (state = IN_NATIVE)
>  - sun.nio.ch.PollArrayWrapper.poll0(long, int, long) @bci=0 (Compiled frame; information may be imprecise)
>  - sun.nio.ch.PollArrayWrapper.poll(int, int, long) @bci=13, line=100 (Compiled frame)
>  - sun.nio.ch.SelectorImpl.lockAndDoSelect(long) @bci=37, line=69 (Compiled frame)
>  - sun.nio.ch.SelectorImpl.select(long) @bci=30, line=80 (Compiled frame)
> Thread 15123: (state = BLOCKED)
> Thread 15140: (state = BLOCKED)
>  - java.lang.Object.wait(long) @bci=0 (Interpreted frame)
>  - org.apache.directory.server.Service$SynchWorker.run() @bci=17, line=155 (Interpreted frame)
>  - java.lang.Thread.run() @bci=11, line=595 (Interpreted frame)
> Thread 15139: (state = IN_NATIVE)
>  - sun.nio.ch.PollArrayWrapper.poll0(long, int, long) @bci=0 (Compiled frame; information may be imprecise)
>  - sun.nio.ch.PollArrayWrapper.poll(int, int, long) @bci=13, line=100 (Compiled frame)
>  - sun.nio.ch.SelectorImpl.lockAndDoSelect(long) @bci=37, line=69 (Compiled frame)
>  - sun.nio.ch.SelectorImpl.select(long) @bci=30, line=80 (Compiled frame)
>  - sun.nio.ch.SelectorImpl.select() @bci=2, line=84 (Interpreted frame)
>  - org.apache.mina.transport.socket.nio.support.SocketAcceptorDelegate$Worker.run() @bci=7, line=326 (Interpreted frame)
> Thread 15132: (state = BLOCKED)
> Thread 15130: (state = BLOCKED)
>  - java.lang.Object.wait(long) @bci=0 (Interpreted frame)
>  - java.lang.ref.ReferenceQueue.remove(long) @bci=44, line=116 (Interpreted frame)
>  - java.lang.ref.ReferenceQueue.remove() @bci=2, line=132 (Interpreted frame)
>  - java.lang.ref.Finalizer$FinalizerThread.run() @bci=3, line=159 (Interpreted frame)
> Thread 15129: (state = BLOCKED)
>  - java.lang.Object.wait(long) @bci=0 (Interpreted frame)
>  - java.lang.Object.wait() @bci=2, line=474 (Interpreted frame)
>  - java.lang.ref.Reference$ReferenceHandler.run() @bci=46, line=116 (Interpreted frame)
> I don't know if the problem is related to DIRMINA-169. Any clue ?

-- 
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