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 2014/07/19 12:16:39 UTC
[jira] [Commented] (QPID-4276) Java client - deadlock on concurrent
close of consumer and connection
[ https://issues.apache.org/jira/browse/QPID-4276?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14067466#comment-14067466 ]
Keith Wall commented on QPID-4276:
----------------------------------
Appears to me (at 0.29) that this deadlock is still possible.
> Java client - deadlock on concurrent close of consumer and connection
> ---------------------------------------------------------------------
>
> Key: QPID-4276
> URL: https://issues.apache.org/jira/browse/QPID-4276
> Project: Qpid
> Issue Type: Bug
> Components: Java Client
> Affects Versions: 0.16, 0.18, 0.29
> Reporter: Philip Harvey
> Attachments: deadlock.stacktrace.txt
>
>
> We have observed a deadlock on the Java client when the following are done concurrently:
> * An application thread closes a consumer
> * The corresponding JMS connection is closed inside onMessage()
> See attached stack trace for details.
> We think this locking bug was introduced when fixing QPID-3911.
> See thread dump excerpt below:
> {noformat}
> Found one Java-level deadlock:
> =============================
> "Thread-11-Consumer_0":
> waiting to lock monitor 0x000000004342b4c0 (object 0x00000000ed1e6a40, a java.lang.Object),
> which is held by "Dispatcher-1-Conn-1"
> "Dispatcher-1-Conn-1":
> waiting to lock monitor 0x000000004342b568 (object 0x00000000ed060c48, a java.lang.Object),
> which is held by "Thread-11-Consumer_0"
> Java stack information for the threads listed above:
> ===================================================
> "Thread-11-Consumer_0":
> at org.apache.qpid.client.BasicMessageConsumer.close(BasicMessageConsumer.java:598)
> - waiting to lock <0x00000000ed1e6a40> (a java.lang.Object)
> - locked <0x00000000ed060c48> (a java.lang.Object)
> at org.apache.qpid.client.BasicMessageConsumer.close(BasicMessageConsumer.java:558)
> at org.apache.qpid.disttest.jms.ClientJmsDelegate.closeTestConsumer(ClientJmsDelegate.java:612)
> at org.apache.qpid.disttest.client.ConsumerParticipant.releaseResources(ConsumerParticipant.java:244)
> at org.apache.qpid.disttest.client.ParticipantExecutor$ParticipantRunnable.runParticipantAndSendResults(ParticipantExecutor.java:112)
> at org.apache.qpid.disttest.client.ParticipantExecutor$ParticipantRunnable.run(ParticipantExecutor.java:84)
> at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
> at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
> at java.lang.Thread.run(Thread.java:662)
> "Dispatcher-1-Conn-1":
> at org.apache.qpid.client.AMQConnection.doClose(AMQConnection.java:857)
> - waiting to lock <0x00000000ed060c48> (a java.lang.Object)
> - locked <0x00000000ed060c58> (a java.lang.Object)
> at org.apache.qpid.client.AMQConnection.doClose(AMQConnection.java:848)
> - locked <0x00000000ed0bedd8> (a java.lang.Object)
> - locked <0x00000000ed060c58> (a java.lang.Object)
> at org.apache.qpid.client.AMQConnection.doClose(AMQConnection.java:848)
> - locked <0x00000000ed1e6a40> (a java.lang.Object)
> - locked <0x00000000ed060c58> (a java.lang.Object)
> at org.apache.qpid.client.AMQConnection.close(AMQConnection.java:832)
> at org.apache.qpid.client.AMQConnection.close(AMQConnection.java:823)
> at org.apache.qpid.client.AMQConnection.close(AMQConnection.java:818)
> at org.apache.qpid.disttest.jms.ClientJmsDelegate.tearDownTest(ClientJmsDelegate.java:574)
> at org.apache.qpid.disttest.client.Client.tearDownTest(Client.java:179)
> at org.apache.qpid.disttest.client.ClientCommandVisitor.visit(ClientCommandVisitor.java:90)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at org.apache.qpid.disttest.Visitor.invokeVisitMethod(Visitor.java:61)
> at org.apache.qpid.disttest.Visitor.visit(Visitor.java:39)
> at org.apache.qpid.disttest.message.Command.accept(Command.java:48)
> at org.apache.qpid.disttest.client.Client.processInstruction(Client.java:113)
> at org.apache.qpid.disttest.jms.ClientJmsDelegate$1.onMessage(ClientJmsDelegate.java:122)
> at org.apache.qpid.client.BasicMessageConsumer.notifyMessage(BasicMessageConsumer.java:751)
> at org.apache.qpid.client.BasicMessageConsumer.notifyMessage(BasicMessageConsumer.java:725)
> at org.apache.qpid.client.AMQSession$Dispatcher.notifyConsumer(AMQSession.java:3479)
> at org.apache.qpid.client.AMQSession$Dispatcher.dispatchMessage(AMQSession.java:3418)
> - locked <0x00000000ed1a30f0> (a java.lang.Object)
> - locked <0x00000000ed186400> (a java.lang.Object)
> at org.apache.qpid.client.AMQSession$Dispatcher.access$1000(AMQSession.java:3205)
> at org.apache.qpid.client.AMQSession.dispatch(AMQSession.java:3198)
> at org.apache.qpid.client.message.UnprocessedMessage.dispatch(UnprocessedMessage.java:54)
> at org.apache.qpid.client.AMQSession$Dispatcher.run(AMQSession.java:3341)
> at java.lang.Thread.run(Thread.java:662)
> Found 1 deadlock.
> {noformat}
--
This message was sent by Atlassian JIRA
(v6.2#6252)
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@qpid.apache.org
For additional commands, e-mail: dev-help@qpid.apache.org