diff options
| author | Robert Godfrey <rgodfrey@apache.org> | 2013-11-21 11:31:30 +0000 |
|---|---|---|
| committer | Robert Godfrey <rgodfrey@apache.org> | 2013-11-21 11:31:30 +0000 |
| commit | 5ea8ab45cbd0181bc1acef84f4f1932e21c096cf (patch) | |
| tree | 14a24303b50540d463d74f2915ecb662e5d496bf /qpid/java/amqp-1-0-client/src | |
| parent | 057b915ee553d3c2843d5178c226454b64d81ef0 (diff) | |
| download | qpid-python-5ea8ab45cbd0181bc1acef84f4f1932e21c096cf.tar.gz | |
QPID-5344 : Deadlock in JMS AMQP 1.0 client - patch from David Ingham
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1544129 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/amqp-1-0-client/src')
| -rw-r--r-- | qpid/java/amqp-1-0-client/src/main/java/org/apache/qpid/amqp_1_0/client/Session.java | 61 |
1 files changed, 32 insertions, 29 deletions
diff --git a/qpid/java/amqp-1-0-client/src/main/java/org/apache/qpid/amqp_1_0/client/Session.java b/qpid/java/amqp-1-0-client/src/main/java/org/apache/qpid/amqp_1_0/client/Session.java index 5b9a67503b..ce1ce512a2 100644 --- a/qpid/java/amqp-1-0-client/src/main/java/org/apache/qpid/amqp_1_0/client/Session.java +++ b/qpid/java/amqp-1-0-client/src/main/java/org/apache/qpid/amqp_1_0/client/Session.java @@ -114,35 +114,38 @@ public class Session } - public synchronized SendingLinkEndpoint createSendingLinkEndpoint(final String linkName, - final Target target, - final Source source, - AcknowledgeMode mode, - Map<Binary, Outcome> unsettled, - final DeliveryStateHandler deliveryStateHandler) - { - SendingLinkEndpoint link = this.getEndpoint().createSendingLinkEndpoint(linkName, source, target, - unsettled, deliveryStateHandler); - - switch(mode) - { - case ALO: - link.setSendingSettlementMode(SenderSettleMode.UNSETTLED); - link.setReceivingSettlementMode(ReceiverSettleMode.FIRST); - break; - case AMO: - link.setSendingSettlementMode(SenderSettleMode.SETTLED); - break; - case EO: - link.setSendingSettlementMode(SenderSettleMode.UNSETTLED); - link.setReceivingSettlementMode(ReceiverSettleMode.SECOND); - break; - - } - - link.attach(); - - return link; + public SendingLinkEndpoint createSendingLinkEndpoint(final String linkName, + final Target target, + final Source source, + AcknowledgeMode mode, + Map<Binary, Outcome> unsettled, + final DeliveryStateHandler deliveryStateHandler) + { + SessionEndpoint endpoint = this.getEndpoint(); + synchronized(endpoint.getLock()) + { + SendingLinkEndpoint link = endpoint.createSendingLinkEndpoint(linkName, source, target, + unsettled, deliveryStateHandler); + + switch(mode) + { + case ALO: + link.setSendingSettlementMode(SenderSettleMode.UNSETTLED); + link.setReceivingSettlementMode(ReceiverSettleMode.FIRST); + break; + case AMO: + link.setSendingSettlementMode(SenderSettleMode.SETTLED); + break; + case EO: + link.setSendingSettlementMode(SenderSettleMode.UNSETTLED); + link.setReceivingSettlementMode(ReceiverSettleMode.SECOND); + break; + + } + + link.attach(); + return link; + } } public Receiver createReceiver(final String sourceAddr) throws ConnectionErrorException |
