Repository: activemq-artemis Updated Branches: refs/heads/master db6ee74a3 -> dc8a22250
ARTEMIS-892 - add lock to tick method https://issues.apache.org/jira/browse/ARTEMIS-892 Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/198143ed Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/198143ed Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/198143ed Branch: refs/heads/master Commit: 198143edd082325801cbe8b1d8aa885a3ad47f35 Parents: db6ee74 Author: Andy Taylor <[email protected]> Authored: Fri Dec 16 12:11:40 2016 +0000 Committer: Andy Taylor <[email protected]> Committed: Fri Dec 16 12:11:54 2016 +0000 ---------------------------------------------------------------------- .../amqp/proton/handler/ProtonHandler.java | 26 +++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/198143ed/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/handler/ProtonHandler.java ---------------------------------------------------------------------- diff --git a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/handler/ProtonHandler.java b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/handler/ProtonHandler.java index 945d01e..71cf4a3 100644 --- a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/handler/ProtonHandler.java +++ b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/handler/ProtonHandler.java @@ -91,22 +91,24 @@ public class ProtonHandler extends ProtonInitializable { } public long tick(boolean firstTick) { - if (!firstTick) { - try { - if (connection.getLocalState() != EndpointState.CLOSED) { - long rescheduleAt = transport.tick(TimeUnit.NANOSECONDS.toMillis(System.nanoTime())); - if (transport.isClosed()) { - throw new IllegalStateException("Channel was inactive for to long"); + synchronized (lock) { + if (!firstTick) { + try { + if (connection.getLocalState() != EndpointState.CLOSED) { + long rescheduleAt = transport.tick(TimeUnit.NANOSECONDS.toMillis(System.nanoTime())); + if (transport.isClosed()) { + throw new IllegalStateException("Channel was inactive for to long"); + } + return rescheduleAt; } - return rescheduleAt; + } catch (Exception e) { + transport.close(); + connection.setCondition(new ErrorCondition()); } - } catch (Exception e) { - transport.close(); - connection.setCondition(new ErrorCondition()); + return 0; } - return 0; + return transport.tick(TimeUnit.NANOSECONDS.toMillis(System.nanoTime())); } - return transport.tick(TimeUnit.NANOSECONDS.toMillis(System.nanoTime())); } public int capacity() {
