Deadlock in Java Broker
-----------------------
Key: QPID-480
URL: https://issues.apache.org/jira/browse/QPID-480
Project: Qpid
Issue Type: Bug
Affects Versions: M2
Reporter: Rob Godfrey
Assigned To: Rob Godfrey
Priority: Critical
Fix For: M2
A deadlock can occur when unsuspending after a QoS caused suspension:
Found one Java-level deadlock:
=============================
"pool-2-thread-2":
waiting to lock monitor 0x00002aab7638af58 (object 0x00002aaab458d8a8, a
java.lang.Object),
which is held by "pool-2-thread-1"
"pool-2-thread-1":
waiting for ownable synchronizer 0x00002aaab45f7008, (a
java.util.concurrent.locks.ReentrantLock$NonfairSync),
which is held by "pool-2-thread-2"
Java stack information for the threads listed above:
===================================================
"pool-2-thread-2":
at
org.apache.qpid.server.ack.UnacknowledgedMessageMapImpl.size(UnacknowledgedMessageMapImpl.java:157)
- waiting to lock <0x00002aaab458d8a8> (a java.lang.Object)
at org.apache.qpid.server.AMQChannel.wouldSuspend(AMQChannel.java:941)
at
org.apache.qpid.server.queue.SubscriptionImpl.wouldSuspend(SubscriptionImpl.java:612)
at
org.apache.qpid.server.queue.SubscriptionSet.nextSubscriberImpl(SubscriptionSet.java:152)
at
org.apache.qpid.server.queue.SubscriptionSet.nextSubscriber(SubscriptionSet.java:129)
at
org.apache.qpid.server.queue.ConcurrentSelectorDeliveryManager.deliver(ConcurrentSelectorDeliveryManager.java:680)
at org.apache.qpid.server.queue.AMQQueue.process(AMQQueue.java:596)
at
org.apache.qpid.server.txn.NonTransactionalContext.deliver(NonTransactionalContext.java:96)
at org.apache.qpid.server.queue.AMQMessage.deliver(AMQMessage.java:666)
at
org.apache.qpid.server.queue.AMQMessage.addContentBodyFrame(AMQMessage.java:344)
at
org.apache.qpid.server.AMQChannel.publishContentBody(AMQChannel.java:245)
at
org.apache.qpid.server.protocol.AMQMinaProtocolSession.contentBodyReceived(AMQMinaProtocolSession.java:393)
at
org.apache.qpid.server.protocol.AMQMinaProtocolSession.frameReceived(AMQMinaProtocolSession.java:227)
at
org.apache.qpid.server.protocol.AMQMinaProtocolSession.dataBlockReceived(AMQMinaProtocolSession.java:197)
at
org.apache.qpid.server.protocol.AMQPFastProtocolHandler.messageReceived(AMQPFastProtocolHandler.java:207)
at
org.apache.mina.common.support.AbstractIoFilterChain$2.messageReceived(AbstractIoFilterChain.java:189)
at
org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:502)
at
org.apache.mina.common.support.AbstractIoFilterChain.access$1000(AbstractIoFilterChain.java:52)
at
org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChain.java:777)
at
org.apache.qpid.pool.PoolingFilter.messageReceived(PoolingFilter.java:136)
at
org.apache.mina.filter.ReferenceCountingIoFilter.messageReceived(ReferenceCountingIoFilter.java:96)
at
org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:502)
at
org.apache.mina.common.support.AbstractIoFilterChain.access$1000(AbstractIoFilterChain.java:52)
at
org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChain.java:777)
at
org.apache.mina.filter.codec.support.SimpleProtocolDecoderOutput.flush(SimpleProtocolDecoderOutput.java:60)
at
org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:185)
at
org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:502)
at
org.apache.mina.common.support.AbstractIoFilterChain.access$1000(AbstractIoFilterChain.java:52)
at
org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChain.java:777)
at org.apache.qpid.pool.Event$ReceivedEvent.process(Event.java:53)
at org.apache.qpid.pool.Job.processAll(Job.java:80)
at org.apache.qpid.pool.Job.run(Job.java:102)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:619)
"pool-2-thread-1":
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00002aaab45f7008> (a
java.util.concurrent.locks.ReentrantLock$NonfairSync)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
at
java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:712)
at
java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:743)
at
java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1079)
at
java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:186)
at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:262)
at
org.apache.qpid.server.queue.ConcurrentSelectorDeliveryManager.hasQueuedMessages(ConcurrentSelectorDeliveryManager.java:139)
at
org.apache.qpid.server.queue.ConcurrentSelectorDeliveryManager.processAsync(ConcurrentSelectorDeliveryManager.java:825)
at org.apache.qpid.server.queue.AMQQueue.deliverAsync(AMQQueue.java:632)
at org.apache.qpid.server.AMQChannel.setSuspended(AMQChannel.java:867)
at
org.apache.qpid.server.AMQChannel.checkSuspension(AMQChannel.java:845)
at
org.apache.qpid.server.AMQChannel.acknowledgeMessage(AMQChannel.java:819)
- locked <0x00002aaab458d8a8> (a java.lang.Object)
at
org.apache.qpid.server.handler.BasicAckMethodHandler.methodReceived(BasicAckMethodHandler.java:65)
at
org.apache.qpid.server.state.AMQStateManager.methodReceived(AMQStateManager.java:222)
at
org.apache.qpid.server.protocol.AMQMinaProtocolSession.methodFrameReceived(AMQMinaProtocolSession.java:312)
at
org.apache.qpid.server.protocol.AMQMinaProtocolSession.frameReceived(AMQMinaProtocolSession.java:219)
at
org.apache.qpid.server.protocol.AMQMinaProtocolSession.dataBlockReceived(AMQMinaProtocolSession.java:197)
at
org.apache.qpid.server.protocol.AMQPFastProtocolHandler.messageReceived(AMQPFastProtocolHandler.java:207)
at
org.apache.mina.common.support.AbstractIoFilterChain$2.messageReceived(AbstractIoFilterChain.java:189)
at
org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:502)
at
org.apache.mina.common.support.AbstractIoFilterChain.access$1000(AbstractIoFilterChain.java:52)
at
org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChain.java:777)
at
org.apache.qpid.pool.PoolingFilter.messageReceived(PoolingFilter.java:136)
at
org.apache.mina.filter.ReferenceCountingIoFilter.messageReceived(ReferenceCountingIoFilter.java:96)
at
org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:502)
at
org.apache.mina.common.support.AbstractIoFilterChain.access$1000(AbstractIoFilterChain.java:52)
at
org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChain.java:777)
at
org.apache.mina.filter.codec.support.SimpleProtocolDecoderOutput.flush(SimpleProtocolDecoderOutput.java:60)
at
org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:185)
at
org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:502)
at
org.apache.mina.common.support.AbstractIoFilterChain.access$1000(AbstractIoFilterChain.java:52)
at
org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChain.java:777)
at org.apache.qpid.pool.Event$ReceivedEvent.process(Event.java:53)
at org.apache.qpid.pool.Job.processAll(Job.java:80)
at org.apache.qpid.pool.Job.run(Job.java:102)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:619)
Found 1 deadlock.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.