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() {

Reply via email to