[
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: [email protected]
For additional commands, e-mail: [email protected]