You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@qpid.apache.org by "Keith Wall (JIRA)" <ji...@apache.org> on 2015/04/13 09:53:12 UTC

[jira] [Resolved] (QPID-6487) [Java Broker] [AMQP 1.0] Deadlock in Java Broker AMQP 1.0 with new IO model

     [ https://issues.apache.org/jira/browse/QPID-6487?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Keith Wall resolved QPID-6487.
------------------------------
       Resolution: Fixed
    Fix Version/s: 6.0 [Java]

> [Java Broker] [AMQP 1.0] Deadlock in Java Broker AMQP 1.0 with new IO model
> ---------------------------------------------------------------------------
>
>                 Key: QPID-6487
>                 URL: https://issues.apache.org/jira/browse/QPID-6487
>             Project: Qpid
>          Issue Type: Bug
>          Components: Java Broker
>    Affects Versions: 6.0 [Java]
>            Reporter: Rob Godfrey
>            Assignee: Rob Godfrey
>             Fix For: 6.0 [Java]
>
>
> With the new threading / I/O model in place a deadlock can occur in the detaching of links:
> {noformat}
> "IO-/127.0.0.1:59379@2150" prio=5 tid=0x1b nid=NA waiting
>   java.lang.Thread.State: WAITING
> blocks pool-1-thread-8@4354
>  at sun.misc.Unsafe.park(Unsafe.java:-1)
>  at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
>  at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:834)
>  at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:994)
>  at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1303)
>  at com.google.common.util.concurrent.AbstractFuture$Sync.get(AbstractFuture.java:292)
>  at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:116)
>  at org.apache.qpid.server.model.AbstractConfiguredObject.doSync(AbstractConfiguredObject.java:1724)
>  at org.apache.qpid.server.model.AbstractConfiguredObject.close(AbstractConfiguredObject.java:637)
>  at org.apache.qpid.server.protocol.v1_0.SendingLink_1_0.remoteDetached(SendingLink_1_0.java:413)
>  at org.apache.qpid.server.protocol.v1_0.Session_1_0$SubjectSpecificSendingLinkListener$2.run(Session_1_0.java:854)
>  at java.security.AccessController.doPrivileged(AccessController.java:-1)
>  at javax.security.auth.Subject.doAs(Subject.java:356)
>  at org.apache.qpid.server.protocol.v1_0.Session_1_0$SubjectSpecificSendingLinkListener.remoteDetached(Session_1_0.java:849)
>  at org.apache.qpid.amqp_1_0.transport.LinkEndpoint.remoteDetached(LinkEndpoint.java:190)
>  - locked <0x1111> (a org.apache.qpid.amqp_1_0.transport.ConnectionEndpoint)
>  at org.apache.qpid.amqp_1_0.transport.SessionEndpoint.detach(SessionEndpoint.java:358)
>  at org.apache.qpid.amqp_1_0.transport.SessionEndpoint.receiveDetach(SessionEndpoint.java:349)
>  at org.apache.qpid.amqp_1_0.transport.ConnectionEndpoint.receiveDetach(ConnectionEndpoint.java:646)
>  at org.apache.qpid.amqp_1_0.type.transport.Detach.invoke(Detach.java:117)
>  at org.apache.qpid.amqp_1_0.transport.ConnectionEndpoint.receive(ConnectionEndpoint.java:808)
>  at org.apache.qpid.amqp_1_0.framing.FrameHandler.parse(FrameHandler.java:241)
>  at org.apache.qpid.server.protocol.v1_0.ProtocolEngine_1_0_0_SASL$4.run(ProtocolEngine_1_0_0_SASL.java:436)
>  at org.apache.qpid.server.protocol.v1_0.ProtocolEngine_1_0_0_SASL$4.run(ProtocolEngine_1_0_0_SASL.java:432)
>  at java.security.AccessController.doPrivileged(AccessController.java:-1)
>  at javax.security.auth.Subject.doAs(Subject.java:356)
>  at org.apache.qpid.server.protocol.v1_0.ProtocolEngine_1_0_0_SASL.received(ProtocolEngine_1_0_0_SASL.java:431)
>  - locked <0x1128> (a
> org.apache.qpid.server.protocol.v1_0.ProtocolEngine_1_0_0_SASL)
>  at org.apache.qpid.server.protocol.MultiVersionProtocolEngine.received(MultiVersionProtocolEngine.java:157)
>  at org.apache.qpid.server.transport.NonBlockingConnection.doRead(NonBlockingConnection.java:375)
>  at org.apache.qpid.server.transport.NonBlockingConnection.doWork(NonBlockingConnection.java:276)
>  at org.apache.qpid.server.transport.NetworkConnectionScheduler.processConnection(NetworkConnectionScheduler.java:89)
>  at org.apache.qpid.server.transport.NetworkConnectionScheduler.access$000(NetworkConnectionScheduler.java:31)
>  at org.apache.qpid.server.transport.NetworkConnectionScheduler$2.run(NetworkConnectionScheduler.java:70)
>  at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
>  at java.util.concurrent.FutureTask.run(FutureTask.java:262)
>  at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:178)
>  at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:292)
>  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>  at java.lang.Thread.run(Thread.java:724)
> "VirtualHostNode-default-Configuration-Thread@2029" prio=5 tid=0xe
> nid=NA waiting
>   java.lang.Thread.State: WAITING
>  at sun.misc.Unsafe.park(Unsafe.java:-1)
>  at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
>  at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:834)
>  at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:867)
>  at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1197)
>  at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:214)
>  at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:290)
>  at org.apache.qpid.server.consumer.AbstractConsumerTarget.getSendLock(AbstractConsumerTarget.java:161)
>  at org.apache.qpid.server.queue.QueueConsumerImpl.onClose(QueueConsumerImpl.java:253)
>  at org.apache.qpid.server.model.AbstractConfiguredObject$5$1.run(AbstractConfiguredObject.java:665)
>  at org.apache.qpid.server.model.AbstractConfiguredObject$17.onSuccess(AbstractConfiguredObject.java:1879)
>  at org.apache.qpid.server.model.AbstractConfiguredObject$17.onSuccess(AbstractConfiguredObject.java:1873)
>  at com.google.common.util.concurrent.Futures$4.run(Futures.java:1149)
>  at org.apache.qpid.server.configuration.updater.TaskExecutorImpl$ImmediateIfSameThreadExecutor.execute(TaskExecutorImpl.java:406)
>  at com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair.execute(ExecutionList.java:150)
>  at com.google.common.util.concurrent.ExecutionList.add(ExecutionList.java:106)
>  at com.google.common.util.concurrent.AbstractFuture.addListener(AbstractFuture.java:170)
>  at com.google.common.util.concurrent.Futures.addCallback(Futures.java:1152)
>  at org.apache.qpid.server.model.AbstractConfiguredObject.doAfter(AbstractConfiguredObject.java:1872)
>  at org.apache.qpid.server.model.AbstractConfiguredObject$ChainedSettableFuture.then(AbstractConfiguredObject.java:1928)
>  at org.apache.qpid.server.model.AbstractConfiguredObject$5.call(AbstractConfiguredObject.java:653)
>  at org.apache.qpid.server.model.AbstractConfiguredObject$5.call(AbstractConfiguredObject.java:644)
>  at org.apache.qpid.server.model.AbstractConfiguredObject$2.execute(AbstractConfiguredObject.java:505)
>  at org.apache.qpid.server.model.AbstractConfiguredObject$2.execute(AbstractConfiguredObject.java:498)
>  at org.apache.qpid.server.configuration.updater.TaskExecutorImpl.executeTask(TaskExecutorImpl.java:318)
>  at org.apache.qpid.server.configuration.updater.TaskExecutorImpl.access$600(TaskExecutorImpl.java:45)
>  at org.apache.qpid.server.configuration.updater.TaskExecutorImpl$CallableWrapper$1.run(TaskExecutorImpl.java:346)
>  at java.security.AccessController.doPrivileged(AccessController.java:-1)
>  at javax.security.auth.Subject.doAs(Subject.java:356)
>  at org.apache.qpid.server.configuration.updater.TaskExecutorImpl$CallableWrapper.call(TaskExecutorImpl.java:341)
>  at java.util.concurrent.FutureTask.run(FutureTask.java:262)
>  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>  at java.lang.Thread.run(Thread.java:724)
> "pool-1-thread-8@4354" prio=5 tid=0x3a nid=NA waiting for monitor entry
>   java.lang.Thread.State: BLOCKED
> waiting for IO-/127.0.0.1:59379@2150 to release lock on <0x1111> (a
> org.apache.qpid.amqp_1_0.transport.ConnectionEndpoint)
>  at org.apache.qpid.server.protocol.v1_0.ConsumerTarget_1_0.queueEmpty(ConsumerTarget_1_0.java:325)
>  at org.apache.qpid.server.queue.QueueConsumerImpl.queueEmpty(QueueConsumerImpl.java:291)
>  at org.apache.qpid.server.queue.AbstractQueue.processQueue(AbstractQueue.java:2286)
>  at org.apache.qpid.server.queue.QueueRunner$1.run(QueueRunner.java:78)
>  at java.security.AccessController.doPrivileged(AccessController.java:-1)
>  at javax.security.auth.Subject.doAs(Subject.java:356)
>  at org.apache.qpid.server.queue.QueueRunner.run(QueueRunner.java:69)
>  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>  at java.lang.Thread.run(Thread.java:724)
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@qpid.apache.org
For additional commands, e-mail: dev-help@qpid.apache.org