summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Gemmell <robbie@apache.org>2013-04-30 11:32:35 +0000
committerRobert Gemmell <robbie@apache.org>2013-04-30 11:32:35 +0000
commit60d12233b68ee819b5cae108c5520cafb46ffc02 (patch)
tree11be17ff251d7bc7045051e35e9eeffa711202df
parentf273a13a34952db85b50e57e52baf7d5eba34e7d (diff)
downloadqpid-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.java11
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());
}
}