Added synchronized when iterating over SynchronizedList as per Java specifications
diff --git a/activemq-broker/src/main/java/org/apache/activemq/broker/TransportConnection.java b/activemq-broker/src/main/java/org/apache/activemq/broker/TransportConnection.java
index a9d36b5..cbb6ffe 100755
--- a/activemq-broker/src/main/java/org/apache/activemq/broker/TransportConnection.java
+++ b/activemq-broker/src/main/java/org/apache/activemq/broker/TransportConnection.java
@@ -858,14 +858,17 @@
}
}
// Cascade the connection stop to temp destinations.
- for (Iterator<DestinationInfo> iter = cs.getTempDestinations().iterator(); iter.hasNext(); ) {
- DestinationInfo di = iter.next();
- try {
- broker.removeDestination(cs.getContext(), di.getDestination(), 0);
- } catch (Throwable e) {
- SERVICELOG.warn("Failed to remove tmp destination {}", di.getDestination(), e);
+ List<DestinationInfo> tempDestinations = cs.getTempDestinations();
+ synchronized (tempDestinations) {
+ for (Iterator<DestinationInfo> iter = tempDestinations.iterator(); iter.hasNext(); ) {
+ DestinationInfo di = iter.next();
+ try {
+ broker.removeDestination(cs.getContext(), di.getDestination(), 0);
+ } catch (Throwable e) {
+ SERVICELOG.warn("Failed to remove tmp destination {}", di.getDestination(), e);
+ }
+ iter.remove();
}
- iter.remove();
}
try {
broker.removeConnection(cs.getContext(), cs.getInfo(), transportException.get());