diff options
| author | Robert Gemmell <robbie@apache.org> | 2013-04-30 11:32:35 +0000 |
|---|---|---|
| committer | Robert Gemmell <robbie@apache.org> | 2013-04-30 11:32:35 +0000 |
| commit | 60d12233b68ee819b5cae108c5520cafb46ffc02 (patch) | |
| tree | 11be17ff251d7bc7045051e35e9eeffa711202df | |
| parent | f273a13a34952db85b50e57e52baf7d5eba34e7d (diff) | |
| download | qpid-python-60d12233b68ee819b5cae108c5520cafb46ffc02.tar.gz | |
QPID-4782: use iterator.remove() to update the map and avoid the CME exposed in r1476219
merged from trunk r1476583
git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/0.22@1477567 13f79535-47bb-0310-9956-ffa450edef68
| -rw-r--r-- | qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/ConnectionAdapter.java | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/ConnectionAdapter.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/ConnectionAdapter.java index 2ecd9a6431..878d4f0034 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/ConnectionAdapter.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/ConnectionAdapter.java @@ -26,6 +26,7 @@ import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Map; @@ -64,14 +65,19 @@ final class ConnectionAdapter extends AbstractAdapter implements Connection synchronized (_sessionAdapters) { - for(AMQSessionModel session : _sessionAdapters.keySet()) + Iterator<AMQSessionModel> iterator = _sessionAdapters.keySet().iterator(); + while(iterator.hasNext()) { + AMQSessionModel session = iterator.next(); if(!actualSessions.contains(session)) { - SessionAdapter adapter = _sessionAdapters.remove(session); + SessionAdapter adapter = _sessionAdapters.get(session); + iterator.remove(); + childRemoved(adapter); // Trigger corresponding ConfigurationChangeListener childRemoved() callback. } } + for(AMQSessionModel session : actualSessions) { if(!_sessionAdapters.containsKey(session)) @@ -81,6 +87,7 @@ final class ConnectionAdapter extends AbstractAdapter implements Connection childAdded(adapter); // Trigger corresponding ConfigurationChangeListener childAdded() callback. } } + return new ArrayList<Session>(_sessionAdapters.values()); } } |
