diff options
author | Shireesh Anjal <shireesh@gluster.com> | 2011-07-11 18:50:35 +0530 |
---|---|---|
committer | Shireesh Anjal <shireesh@gluster.com> | 2011-07-11 19:02:00 +0530 |
commit | 5451e77260d7bc91c686103b0878e18f6ebc9343 (patch) | |
tree | f9a1f1b880b95dfa4b640d4c62520368a842a226 /src/com.gluster.storage.management.client/src/com/gluster/storage/management | |
parent | f2b7db6ce2fd00a95552391e59785a7ea365f26d (diff) |
Task#111 - Auto-refresh of data in views
Diffstat (limited to 'src/com.gluster.storage.management.client/src/com/gluster/storage/management')
-rw-r--r-- | src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java index ee3667d5..4585aca6 100644 --- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java +++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java @@ -568,7 +568,12 @@ public class GlusterDataModelManager { Cluster cluster = model.getCluster(); cluster.removeServer(server); - for (ClusterListener listener : listeners) { + // can't use an iterator here. The method AbstractList.Itr#next checks for concurrent modification. + // Since listeners can end up creating new views, which add themselves as listeners, the listeners + // list can be concurrently modified which can result in an exception while using iterator. + // Hence we use List#get instead of the iterator + for(int i = 0; i < listeners.size(); i++) { + ClusterListener listener = listeners.get(i); listener.serverRemoved(server); } @@ -582,7 +587,12 @@ public class GlusterDataModelManager { Cluster cluster = model.getCluster(); cluster.deleteVolume(volume); - for (ClusterListener listener : listeners) { + // can't use an iterator here. The method AbstractList.Itr#next checks for concurrent modification. + // Since listeners can end up creating new views, which add themselves as listeners, the listeners + // list can be concurrently modified which can result in an exception while using iterator. + // Hence we use List#get instead of the iterator + for(int i = 0; i < listeners.size(); i++) { + ClusterListener listener = listeners.get(i); listener.volumeDeleted(volume); } } |