You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@qpid.apache.org by "Robbie Gemmell (Resolved) (JIRA)" <ji...@apache.org> on 2012/04/06 12:59:24 UTC

[jira] [Resolved] (QPID-3911) Consumer.close() and session.rollback() deadlocks

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

Robbie Gemmell resolved QPID-3911.
----------------------------------

       Resolution: Fixed
    Fix Version/s: 0.17

Rob and I both looked over the patch separately and think it seems ok, and it passes the tests fine locally. I have applied it to trunk and we will to subject it to CI over the weekend to give it fuller workout before asking for inclusion in 0.16.
                
> Consumer.close() and session.rollback() deadlocks 
> --------------------------------------------------
>
>                 Key: QPID-3911
>                 URL: https://issues.apache.org/jira/browse/QPID-3911
>             Project: Qpid
>          Issue Type: Bug
>          Components: Java Client
>    Affects Versions: 0.16
>         Environment: 0.16 Java Client and Java Broker
>            Reporter: Praveen Murugesan
>            Assignee: Robbie Gemmell
>              Labels: java, qpidclient
>             Fix For: 0.17
>
>         Attachments: DeadLockStackTraces.txt, QPID-3911-Fix-deadlock-on-concurrent-invocation-of-MessageConsumer-close-and-Session-rollback.patch, QpidConsumerCloseRollbackDeadlock.java
>
>
> Found one Java-level deadlock:
> =============================
> "Dispatcher-Channel-0":
>    waiting to lock monitor 0x0000000001e65ec8 (object 
> 0x00000007c180bd58, a java.lang.Object),
>    which is held by "main"
> "main":
>    waiting to lock monitor 0x0000000001cffbc8 (object 
> 0x00000007c2e10c08, a java.lang.Object),
>    which is held by "Dispatcher-Channel-0"
> Java stack information for the threads listed above:
> ===================================================
> "Dispatcher-Channel-0":
>      at 
> org.apache.qpid.client.AMQConnection.exceptionReceived(AMQConnection.java:1255)
>      - waiting to lock <0x00000007c180bd58> (a java.lang.Object)
>      at 
> org.apache.qpid.client.AMQSession_0_10.setCurrentException(AMQSession_0_10.java:1057)
>      at 
> org.apache.qpid.client.AMQSession_0_10.sync(AMQSession_0_10.java:1034)
>      at 
> org.apache.qpid.client.AMQSession_0_10.sendSuspendChannel(AMQSession_0_10.java:851)
>      at 
> org.apache.qpid.client.AMQSession.suspendChannel(AMQSession.java:3075)
>      - locked <0x00000007c2c3d330> (a java.lang.Object)
>      at org.apache.qpid.client.AMQSession.rollback(AMQSession.java:1854)
>      - locked <0x00000007c2c3d330> (a java.lang.Object)
>      at 
> QpidConsumerCloseRollbackDeadlock$QpidMqHandler.onMessage(QpidConsumerCloseRollbackDeadlock.java:208)
>      at 
> org.apache.qpid.client.BasicMessageConsumer.notifyMessage(BasicMessageConsumer.java:745)
>      at 
> org.apache.qpid.client.BasicMessageConsumer_0_10.notifyMessage(BasicMessageConsumer_0_10.java:141)
>      at 
> org.apache.qpid.client.BasicMessageConsumer.notifyMessage(BasicMessageConsumer.java:719)
>      at 
> org.apache.qpid.client.BasicMessageConsumer_0_10.notifyMessage(BasicMessageConsumer_0_10.java:186)
>      at 
> org.apache.qpid.client.BasicMessageConsumer_0_10.notifyMessage(BasicMessageConsumer_0_10.java:54)
>      at 
> org.apache.qpid.client.AMQSession$Dispatcher.notifyConsumer(AMQSession.java:3467)
>      at 
> org.apache.qpid.client.AMQSession$Dispatcher.dispatchMessage(AMQSession.java:3406)
>      - locked <0x00000007c2c3d350> (a java.lang.Object)
>      - locked <0x00000007c2e10c08> (a java.lang.Object)
>      at 
> org.apache.qpid.client.AMQSession$Dispatcher.access$1000(AMQSession.java:3180)
>      at org.apache.qpid.client.AMQSession.dispatch(AMQSession.java:3173)
>      at 
> org.apache.qpid.client.message.UnprocessedMessage.dispatch(UnprocessedMessage.java:54)
>      at 
> org.apache.qpid.client.AMQSession$Dispatcher.run(AMQSession.java:3329)
>      at java.lang.Thread.run(Thread.java:636)
> "main":
>      at 
> org.apache.qpid.client.AMQSession$Dispatcher.rejectPending(AMQSession.java:3211)
>      - waiting to lock <0x00000007c2e10c08> (a java.lang.Object)
>      at 
> org.apache.qpid.client.AMQSession.confirmConsumerCancelled(AMQSession.java:903)
>      at 
> org.apache.qpid.client.BasicMessageConsumer_0_10.sendCancel(BasicMessageConsumer_0_10.java:170)
>      at 
> org.apache.qpid.client.BasicMessageConsumer.close(BasicMessageConsumer.java:593)
>      - locked <0x00000007c180bd58> (a java.lang.Object)
>      at 
> org.apache.qpid.client.BasicMessageConsumer.close(BasicMessageConsumer.java:555)
>      at 
> QpidConsumerCloseRollbackDeadlock.main(QpidConsumerCloseRollbackDeadlock.java:77)
> Found 1 deadlock.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

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