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

Rajith Attapattu updated QPID-4574:
-----------------------------------

    Comment: was deleted

(was: {code}
diff --git 
a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java 
b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java
index 91a6389..8a7d807 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java
@@ -3265,44 +3265,45 @@ public abstract class AMQSession<C extends 
BasicMessageConsumer, P extends Basic
         {
             long deliveryTag = message.getDeliveryTag();
 
-            synchronized (_lock)
+            synchronized (_connection.getFailoverMutex())
             {
-
-                try
+                synchronized (_lock)
                 {
-                    while (connectionStopped())
+                    try
                     {
-                        _lock.wait();
+                        while (connectionStopped())
+                        {
+                            _lock.wait();
+                        }
+                    }
+                    catch (InterruptedException e)
+                    {
+                        Thread.currentThread().interrupt();
                     }
-                }
-                catch (InterruptedException e)
-                {
-                    Thread.currentThread().interrupt();
-                }
 
-                if (!(message instanceof CloseConsumerMessage)
-                    && tagLE(deliveryTag, _rollbackMark.get()))
-                {
-                    if (_logger.isDebugEnabled())
+                    if (!(message instanceof CloseConsumerMessage)
+                        && tagLE(deliveryTag, _rollbackMark.get()))
                     {
-                        _logger.debug("Rejecting message because delivery tag 
" + deliveryTag
-                                + " <= rollback mark " + _rollbackMark.get());
+                        if (_logger.isDebugEnabled())
+                        {
+                            _logger.debug("Rejecting message because delivery 
tag " + deliveryTag
+                                    + " <= rollback mark " + 
_rollbackMark.get());
+                        }
+                        rejectMessage(message, true);
                     }
-                    rejectMessage(message, true);
-                }
-                else if (_usingDispatcherForCleanup)
-                {
-                    _prefetchedMessageTags.add(deliveryTag);
-                }
-                else
-                {
-                    synchronized (_messageDeliveryLock)
+                    else if (_usingDispatcherForCleanup)
+                    {
+                        _prefetchedMessageTags.add(deliveryTag);
+                    }
+                    else
                     {
-                        notifyConsumer(message);
+                        synchronized (_messageDeliveryLock)
+                        {
+                            notifyConsumer(message);
+                        }
                     }
                 }
             }
-
             long current = _rollbackMark.get();
             if (updateRollbackMark(current, deliveryTag))
             {
{code})
    
> [JMS] Deadlock involving _failoverMutex and _messageDeliveryLock
> ----------------------------------------------------------------
>
>                 Key: QPID-4574
>                 URL: https://issues.apache.org/jira/browse/QPID-4574
>             Project: Qpid
>          Issue Type: Bug
>          Components: Java Client
>    Affects Versions: 0.14, 0.16, 0.18, 0.20
>            Reporter: Rajith Attapattu
>            Assignee: Rajith Attapattu
>              Labels: deadlock
>             Fix For: 0.21
>
>         Attachments: Test_00782235.java
>
>
> This deadlock can manifest when a you have a producer sending messages inside 
> an onMessage() call.
> This is a common enough pattern, and is used by intermediaries like Message 
> Bridges, ESB's etc..
> "Dispatcher-0-Conn-1":
>       at 
> org.apache.qpid.client.BasicMessageProducer.send(BasicMessageProducer.java:309)
>       - waiting to lock <0x00000000ecfd15a8> (a java.lang.Object)
>       at Test_00782235$1.onMessage(Test_00782235.java:29)
>       at 
> org.apache.qpid.client.BasicMessageConsumer.notifyMessage(BasicMessageConsumer.java:751)
>       at 
> org.apache.qpid.client.BasicMessageConsumer_0_10.notifyMessage(BasicMessageConsumer_0_10.java:141)
>       at 
> org.apache.qpid.client.BasicMessageConsumer.notifyMessage(BasicMessageConsumer.java:725)
>       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:3479)
>       at 
> org.apache.qpid.client.AMQSession$Dispatcher.dispatchMessage(AMQSession.java:3418)
>       - locked <0x00000000ecfd16c8> (a java.lang.Object)
>       - locked <0x00000000ecfd16d8> (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:679)
> "main":
>       at 
> org.apache.qpid.client.BasicMessageConsumer.close(BasicMessageConsumer.java:598)
>       - waiting to lock <0x00000000ecfd16c8> (a java.lang.Object)
>       - locked <0x00000000ecfd15a8> (a java.lang.Object)
>       at 
> org.apache.qpid.client.BasicMessageConsumer.close(BasicMessageConsumer.java:558)
>       at Test_00782235.<init>(Test_00782235.java:62)
>       at Test_00782235.main(Test_00782235.java:12)

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

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

Reply via email to