Merge pull request #160 from emopers/SynchronizedCollection_140_422

TransportConnection does not synchronize iteration on synchronized list
This commit is contained in:
JB Onofré 2023-10-17 11:21:36 +02:00 committed by GitHub
commit 07cce0609b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 10 additions and 7 deletions

View File

@ -892,14 +892,17 @@ public class TransportConnection implements Connection, Task, CommandVisitor {
}
}
// 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());