You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by cs...@apache.org on 2016/11/01 14:31:51 UTC

activemq git commit: https://issues.apache.org/jira/browse/AMQ-6477

Repository: activemq
Updated Branches:
  refs/heads/master a8a650cbe -> 5c80eda32


https://issues.apache.org/jira/browse/AMQ-6477

Fixing potential concurrent modification exception


Project: http://git-wip-us.apache.org/repos/asf/activemq/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq/commit/5c80eda3
Tree: http://git-wip-us.apache.org/repos/asf/activemq/tree/5c80eda3
Diff: http://git-wip-us.apache.org/repos/asf/activemq/diff/5c80eda3

Branch: refs/heads/master
Commit: 5c80eda321e7edb5f34ffd62c71523310d26b2ca
Parents: a8a650c
Author: Christopher L. Shannon (cshannon) <ch...@gmail.com>
Authored: Tue Nov 1 10:25:01 2016 -0400
Committer: Christopher L. Shannon (cshannon) <ch...@gmail.com>
Committed: Tue Nov 1 10:31:20 2016 -0400

----------------------------------------------------------------------
 .../org/apache/activemq/usecases/AMQ6477Test.java | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq/blob/5c80eda3/activemq-unit-tests/src/test/java/org/apache/activemq/usecases/AMQ6477Test.java
----------------------------------------------------------------------
diff --git a/activemq-unit-tests/src/test/java/org/apache/activemq/usecases/AMQ6477Test.java b/activemq-unit-tests/src/test/java/org/apache/activemq/usecases/AMQ6477Test.java
index 02d9425..50292c1 100644
--- a/activemq-unit-tests/src/test/java/org/apache/activemq/usecases/AMQ6477Test.java
+++ b/activemq-unit-tests/src/test/java/org/apache/activemq/usecases/AMQ6477Test.java
@@ -20,6 +20,7 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 
 import java.lang.reflect.Field;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
@@ -174,15 +175,22 @@ public class AMQ6477Test {
 
     @SuppressWarnings("unchecked")
     protected List<MessageReference> getSubscriptionMessages(Subscription sub) throws Exception {
-        Field f = null;
+        Field dispatchedField = null;
+        Field dispatchLockField = null;
 
         if (sub instanceof TopicSubscription) {
-            f = TopicSubscription.class.getDeclaredField("dispatched");
+            dispatchedField = TopicSubscription.class.getDeclaredField("dispatched");
+            dispatchLockField = TopicSubscription.class.getDeclaredField("dispatchLock");
         } else {
-            f = PrefetchSubscription.class.getDeclaredField("dispatched");
+            dispatchedField = PrefetchSubscription.class.getDeclaredField("dispatched");
+            dispatchLockField = PrefetchSubscription.class.getDeclaredField("dispatchLock");
+        }
+        dispatchedField.setAccessible(true);
+        dispatchLockField.setAccessible(true);
+
+        synchronized (dispatchLockField.get(sub)) {
+            return new ArrayList<MessageReference>((List<MessageReference>)dispatchedField.get(sub));
         }
-        f.setAccessible(true);
-        return (List<MessageReference>) f.get(sub);
     }
 
 }
\ No newline at end of file