The deadlock is between the session's _messageDeliveryLock and the Dispatcher's _lock. The dispatcher thread's main loop attempts to acquire _lock first and then _messageDeliveryLock. The main thread acquires _messageDeliveryLock first thing on close(...) and then subsequently many levels down the stack attempts to acquire _lock in order to call Dispatcher.rejectPending(...).

The change causes this to occur more frequently because it moves the shutdown of the dispatcher thread to a later point, thereby increasing the probability a deadlock will occur, but I think the possibility was always there.

I believe the reason the 0-8 code path is not affected is because it calls AMQSession.confirmConsumerCanceled(...) in the BasicCancelOkMethodHandler which is executed in another thread, so the main thread doesn't try to acquire the Dispatcher's _lock.

--Rafael

Rajith Attapattu wrote:
Hi All,

Following is the thread dump which identifies the deadlock.
Note this happens within the 0-10 code path.

This seems to have been introduced in revision 632331 after the fix for
QPID-823 in AMQSession.
If I rollback this deadlock doesn't happen.

[junit] Running org.apache.qpid.client.MessageListenerMultiConsumerTest
Full thread dump Java HotSpot(TM) Client VM (1.5.0_09-b03 mixed mode,
sharing):

"Dispatcher-Channel-2" daemon prio=1 tid=0x0aec0ba0 nid=0x362f waiting for
monitor entry [0xb047f000..0xb047f130]
        at org.apache.qpid.client.AMQSession$Dispatcher.run(AMQSession.java
:2449)
        - waiting to lock <0x88bab5a8> (a java.lang.Object)
        - locked <0x88be5810> (a java.lang.Object)

"SocketConnectorIoProcessor-4.0" prio=1 tid=0x0ae4a2a0 nid=0x362c runnable
[0xb037c000..0xb037ceb0]
        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 <0x88d905c0> (a sun.nio.ch.Util$1)
        - locked <0x88d9f0d8> (a java.util.Collections$UnmodifiableSet)
        - locked <0x88d9d568> (a sun.nio.ch.PollSelectorImpl)
        at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:80)
        at org.apache.mina.transport.socket.nio.SocketIoProcessor$Worker.run
(SocketIoProcessor.java:558)
        at org.apache.mina.util.NamePreservingRunnable.run(
NamePreservingRunnable.java:43)
        at java.lang.Thread.run(Thread.java:595)

"Thread-47" prio=1 tid=0x08d68e58 nid=0x361a runnable
[0xb0580000..0xb0580fb0]
        at java.io.FileInputStream.readBytes(Native Method)
        at java.io.FileInputStream.read(FileInputStream.java:194)
        at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
        at java.io.BufferedInputStream.read1(BufferedInputStream.java:256)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:313)
        - locked <0x88d92810> (a java.io.BufferedInputStream)
        at java.io.FilterInputStream.read(FilterInputStream.java:90)
        at org.apache.qpid.testutil.QpidTestCase$Piper.run(QpidTestCase.java
:103)

"process reaper" daemon prio=1 tid=0x08e54828 nid=0x3618 runnable
[0xb0601000..0xb0602030]
        at java.lang.UNIXProcess.waitForProcessExit(Native Method)
        at java.lang.UNIXProcess.access$900(UNIXProcess.java:20)
        at java.lang.UNIXProcess$1$1.run(UNIXProcess.java:132)

"VmPipeIdleStatusChecker" daemon prio=1 tid=0x08db1438 nid=0x35e1 waiting on
condition [0xb0703000..0xb0703f30]
        at java.lang.Thread.sleep(Native Method)
        at
org.apache.mina.transport.vmpipe.support.VmPipeIdleStatusChecker$Worker.run(
VmPipeIdleStatusChecker.java:74)

"PooledByteBufferExpirer-0" daemon prio=1 tid=0x0887c408 nid=0x35dd waiting
on condition [0xb0f06000..0xb0f070b0]
        at java.lang.Thread.sleep(Native Method)
        at org.apache.mina.common.PooledByteBufferAllocator$Expirer.run(
PooledByteBufferAllocator.java:277)

"AnonymousIoService-2" daemon prio=1 tid=0x08872a08 nid=0x35dc in
Object.wait() [0xb0a3d000..0xb0a3e130]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x89696af8> (a
edu.emory.mathcs.backport.java.util.concurrent.LinkedBlockingQueue$SerializableLock
)
        at java.lang.Object.wait(Object.java:474)
        at
edu.emory.mathcs.backport.java.util.concurrent.LinkedBlockingQueue.take(
LinkedBlockingQueue.java:316)
        - locked <0x89696af8> (a
edu.emory.mathcs.backport.java.util.concurrent.LinkedBlockingQueue$SerializableLock
)
        at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor.getTask(
ThreadPoolExecutor.java:493)
        at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run
(ThreadPoolExecutor.java:689)
        at java.lang.Thread.run(Thread.java:595)

"AnonymousIoService-1" daemon prio=1 tid=0x08841b10 nid=0x35db in
Object.wait() [0xb0abe000..0xb0abedb0]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x89696af8> (a
edu.emory.mathcs.backport.java.util.concurrent.LinkedBlockingQueue$SerializableLock
)
        at java.lang.Object.wait(Object.java:474)
        at
edu.emory.mathcs.backport.java.util.concurrent.LinkedBlockingQueue.take(
LinkedBlockingQueue.java:316)
        - locked <0x89696af8> (a
edu.emory.mathcs.backport.java.util.concurrent.LinkedBlockingQueue$SerializableLock
)
        at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor.getTask(
ThreadPoolExecutor.java:493)
        at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run
(ThreadPoolExecutor.java:689)
        at java.lang.Thread.run(Thread.java:595)

"SocketAcceptor-0" prio=1 tid=0x08d47028 nid=0x35d7 runnable
[0xb0d83000..0xb0d83fb0]
        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 <0x89696c58> (a sun.nio.ch.Util$1)
        - locked <0x89696c68> (a java.util.Collections$UnmodifiableSet)
        - locked <0x89696c08> (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.SocketAcceptor$Worker.run(
SocketAcceptor.java:266)
        at org.apache.mina.util.NamePreservingRunnable.run(
NamePreservingRunnable.java:43)
        at java.lang.Thread.run(Thread.java:595)

"Thread-5" daemon prio=1 tid=0x08cff508 nid=0x357b waiting for monitor entry
[0xb0e04000..0xb0e04db0]
        at java.io.BufferedInputStream.read(BufferedInputStream.java:304)
        - waiting to lock <0x89078838> (a java.io.BufferedInputStream)
        at java.io.FilterInputStream.read(FilterInputStream.java:111)
        at java.io.FilterInputStream.read(FilterInputStream.java:90)
        at org.apache.tools.ant.taskdefs.StreamPumper.run(StreamPumper.java
:92)
        at java.lang.Thread.run(Thread.java:595)

"Thread-2" daemon prio=1 tid=0x08cfb398 nid=0x356d runnable
[0xb0e85000..0xb0e86030]
        at java.io.FileInputStream.readBytes(Native Method)
        at java.io.FileInputStream.read(FileInputStream.java:194)
        at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
        at java.io.BufferedInputStream.read1(BufferedInputStream.java:256)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:313)
        - locked <0x89078838> (a java.io.BufferedInputStream)
        at java.io.FilterInputStream.read(FilterInputStream.java:111)
        at java.io.FilterInputStream.read(FilterInputStream.java:90)
        at org.apache.tools.ant.taskdefs.StreamPumper.run(StreamPumper.java
:92)
        at java.lang.Thread.run(Thread.java:595)

"Low Memory Detector" daemon prio=1 tid=0x0880d5c8 nid=0x3567 runnable
[0x00000000..0x00000000]

"CompilerThread0" daemon prio=1 tid=0x0880c020 nid=0x3566 waiting on
condition [0x00000000..0xb22ef918]

"Signal Dispatcher" daemon prio=1 tid=0x0880b0d8 nid=0x3565 runnable
[0x00000000..0x00000000]

"Finalizer" daemon prio=1 tid=0x08804228 nid=0x3564 in Object.wait()
[0xb25f1000..0xb25f2030]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x89075e68> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116)
        - locked <0x89075e68> (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=0x08803528 nid=0x3563 in Object.wait()
[0xb2672000..0xb26730b0]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x89075ee8> (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 <0x89075ee8> (a java.lang.ref.Reference$Lock)

"main" prio=1 tid=0x087c4670 nid=0x3560 waiting for monitor entry
[0xbf913000..0xbf9145a8]
        at org.apache.qpid.client.AMQSession$Dispatcher.rejectPending(
AMQSession.java:2347)
        - waiting to lock <0x88be5810> (a java.lang.Object)
        at org.apache.qpid.client.AMQSession.confirmConsumerCancelled(
AMQSession.java:603)
        at org.apache.qpid.client.BasicMessageConsumer_0_10.sendCancel
(BasicMessageConsumer_0_10.java:209)
        at org.apache.qpid.client.BasicMessageConsumer.close(
BasicMessageConsumer.java:520)
        - locked <0x88d9dab8> (a java.lang.Object)
        at org.apache.qpid.client.BasicMessageConsumer.close(
BasicMessageConsumer.java:487)
        at org.apache.qpid.client.BasicMessageConsumer_0_10.close
(BasicMessageConsumer_0_10.java:487)
        at org.apache.qpid.client.AMQSession.closeConsumers(AMQSession.java
:1791)
        at org.apache.qpid.client.AMQSession.closeProducersAndConsumers(
AMQSession.java:1841)
        at org.apache.qpid.client.AMQSession.close(AMQSession.java:473)
        - locked <0x88d9dab8> (a java.lang.Object)
        - locked <0x88bab5a8> (a java.lang.Object)
        at org.apache.qpid.client.AMQConnection.closeAllSessions(
AMQConnection.java:754)
        at org.apache.qpid.client.AMQConnection.close(AMQConnection.java
:673)
        - locked <0x88d9dab8> (a java.lang.Object)
        at org.apache.qpid.client.AMQConnection.close(AMQConnection.java
:659)
        at org.apache.qpid.client.MessageListenerMultiConsumerTest.tearDown(
MessageListenerMultiConsumerTest.java:106)
        at junit.framework.TestCase.runBare(TestCase.java:130)
        at org.apache.qpid.testutil.QpidTestCase.runBare(QpidTestCase.java
:71)
        at junit.framework.TestResult$1.protect(TestResult.java:106)
        at junit.framework.TestResult.runProtected(TestResult.java:124)
        at junit.framework.TestResult.run(TestResult.java:109)
        at junit.framework.TestCase.run(TestCase.java:118)
        at junit.framework.TestSuite.runTest(TestSuite.java:208)
        at junit.framework.TestSuite.run(TestSuite.java:203)
        at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(
JUnitTestRunner.java:421)
        at
org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.executeInVM(
JUnitTask.java:1245)
        at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.execute(
JUnitTask.java:814)
        at
org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.executeOrQueue(
JUnitTask.java:1657)
        at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.execute(
JUnitTask.java:764)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java
:288)
        at sun.reflect.GeneratedMethodAccessor37.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(
DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.apache.tools.ant.dispatch.DispatchUtils.execute(
DispatchUtils.java:105)
        at org.apache.tools.ant.Task.perform(Task.java:348)
        at org.apache.tools.ant.Target.execute(Target.java:357)
        at org.apache.tools.ant.Target.performTasks(Target.java:385)
        at org.apache.tools.ant.Project.executeSortedTargets(Project.java
:1329)
        at org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(
SingleCheckExecutor.java:38)
        at org.apache.tools.ant.Project.executeTargets(Project.java:1181)
        at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:416)
        at org.apache.tools.ant.taskdefs.SubAnt.execute(SubAnt.java:289)
        at org.apache.tools.ant.taskdefs.SubAnt.execute(SubAnt.java:208)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java
:288)
        at sun.reflect.GeneratedMethodAccessor37.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(
DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.apache.tools.ant.dispatch.DispatchUtils.execute(
DispatchUtils.java:105)
        at org.apache.tools.ant.Task.perform(Task.java:348)
        at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java
:62)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java
:288)
        at sun.reflect.GeneratedMethodAccessor37.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(
DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.apache.tools.ant.dispatch.DispatchUtils.execute(
DispatchUtils.java:105)
        at org.apache.tools.ant.Task.perform(Task.java:348)
        at org.apache.tools.ant.taskdefs.MacroInstance.execute(
MacroInstance.java:391)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java
:288)
        at sun.reflect.GeneratedMethodAccessor37.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(
DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.apache.tools.ant.dispatch.DispatchUtils.execute(
DispatchUtils.java:105)
        at org.apache.tools.ant.Task.perform(Task.java:348)
        at org.apache.tools.ant.Target.execute(Target.java:357)
        at org.apache.tools.ant.Target.performTasks(Target.java:385)
        at org.apache.tools.ant.Project.executeSortedTargets(Project.java
:1329)
        at org.apache.tools.ant.Project.executeTarget(Project.java:1298)
        at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(
DefaultExecutor.java:41)
        at org.apache.tools.ant.Project.executeTargets(Project.java:1181)
        at org.apache.tools.ant.Main.runBuild(Main.java:698)
        at org.apache.tools.ant.Main.startAnt(Main.java:199)
        at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257)
        at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104)

"VM Thread" prio=1 tid=0x08800948 nid=0x3562 runnable

"VM Periodic Task Thread" prio=1 tid=0x0880eab0 nid=0x3568 waiting on
condition


Found one Java-level deadlock:
=============================
"Dispatcher-Channel-2":
  waiting to lock monitor 0x088052bc (object 0x88bab5a8, a java.lang.Object
),
  which is held by "main"
"main":
  waiting to lock monitor 0x0880533c (object 0x88be5810, a java.lang.Object
),
  which is held by "Dispatcher-Channel-2"

Java stack information for the threads listed above:
===================================================
"Dispatcher-Channel-2":
        at org.apache.qpid.client.AMQSession$Dispatcher.run(AMQSession.java
:2449)
        - waiting to lock <0x88bab5a8> (a java.lang.Object)
        - locked <0x88be5810> (a java.lang.Object)
"main":
        at org.apache.qpid.client.AMQSession$Dispatcher.rejectPending(
AMQSession.java:2347)
        - waiting to lock <0x88be5810> (a java.lang.Object)
        at org.apache.qpid.client.AMQSession.confirmConsumerCancelled(
AMQSession.java:603)
        at org.apache.qpid.client.BasicMessageConsumer_0_10.sendCancel
(BasicMessageConsumer_0_10.java:209)
        at org.apache.qpid.client.BasicMessageConsumer.close(
BasicMessageConsumer.java:520)
        - locked <0x88d9dab8> (a java.lang.Object)
        at org.apache.qpid.client.BasicMessageConsumer.close(
BasicMessageConsumer.java:487)
        at org.apache.qpid.client.BasicMessageConsumer_0_10.close
(BasicMessageConsumer_0_10.java:487)
        at org.apache.qpid.client.AMQSession.closeConsumers(AMQSession.java
:1791)
        at org.apache.qpid.client.AMQSession.closeProducersAndConsumers(
AMQSession.java:1841)
        at org.apache.qpid.client.AMQSession.close(AMQSession.java:473)
        - locked <0x88d9dab8> (a java.lang.Object)
        - locked <0x88bab5a8> (a java.lang.Object)
        at org.apache.qpid.client.AMQConnection.closeAllSessions(
AMQConnection.java:754)
        at org.apache.qpid.client.AMQConnection.close(AMQConnection.java
:673)
        - locked <0x88d9dab8> (a java.lang.Object)
        at org.apache.qpid.client.AMQConnection.close(AMQConnection.java
:659)
        at org.apache.qpid.client.MessageListenerMultiConsumerTest.tearDown(
MessageListenerMultiConsumerTest.java:106)
        at junit.framework.TestCase.runBare(TestCase.java:130)
        at org.apache.qpid.testutil.QpidTestCase.runBare(QpidTestCase.java
:71)
        at junit.framework.TestResult$1.protect(TestResult.java:106)
        at junit.framework.TestResult.runProtected(TestResult.java:124)
        at junit.framework.TestResult.run(TestResult.java:109)
        at junit.framework.TestCase.run(TestCase.java:118)
        at junit.framework.TestSuite.runTest(TestSuite.java:208)
        at junit.framework.TestSuite.run(TestSuite.java:203)
        at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(
JUnitTestRunner.java:421)
        at
org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.executeInVM(
JUnitTask.java:1245)
        at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.execute(
JUnitTask.java:814)
        at
org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.executeOrQueue(
JUnitTask.java:1657)
        at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.execute(
JUnitTask.java:764)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java
:288)
        at sun.reflect.GeneratedMethodAccessor37.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(
DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.apache.tools.ant.dispatch.DispatchUtils.execute(
DispatchUtils.java:105)
        at org.apache.tools.ant.Task.perform(Task.java:348)
        at org.apache.tools.ant.Target.execute(Target.java:357)
        at org.apache.tools.ant.Target.performTasks(Target.java:385)
        at org.apache.tools.ant.Project.executeSortedTargets(Project.java
:1329)
        at org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(
SingleCheckExecutor.java:38)
        at org.apache.tools.ant.Project.executeTargets(Project.java:1181)
        at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:416)
        at org.apache.tools.ant.taskdefs.SubAnt.execute(SubAnt.java:289)
        at org.apache.tools.ant.taskdefs.SubAnt.execute(SubAnt.java:208)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java
:288)
        at sun.reflect.GeneratedMethodAccessor37.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(
DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.apache.tools.ant.dispatch.DispatchUtils.execute(
DispatchUtils.java:105)
        at org.apache.tools.ant.Task.perform(Task.java:348)
        at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java
:62)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java
:288)
        at sun.reflect.GeneratedMethodAccessor37.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(
DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.apache.tools.ant.dispatch.DispatchUtils.execute(
DispatchUtils.java:105)
        at org.apache.tools.ant.Task.perform(Task.java:348)
        at org.apache.tools.ant.taskdefs.MacroInstance.execute(
MacroInstance.java:391)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java
:288)
        at sun.reflect.GeneratedMethodAccessor37.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(
DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.apache.tools.ant.dispatch.DispatchUtils.execute(
DispatchUtils.java:105)
        at org.apache.tools.ant.Task.perform(Task.java:348)
        at org.apache.tools.ant.Target.execute(Target.java:357)
        at org.apache.tools.ant.Target.performTasks(Target.java:385)
        at org.apache.tools.ant.Project.executeSortedTargets(Project.java
:1329)
        at org.apache.tools.ant.Project.executeTarget(Project.java:1298)
        at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(
DefaultExecutor.java:41)
        at org.apache.tools.ant.Project.executeTargets(Project.java:1181)
        at org.apache.tools.ant.Main.runBuild(Main.java:698)
        at org.apache.tools.ant.Main.startAnt(Main.java:199)
        at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257)
        at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104)

Found 1 deadlock.

Reply via email to