From 96ab1b4533b62464b8325373e677209290bced3e Mon Sep 17 00:00:00 2001 From: ElgarL Date: Mon, 10 Sep 2012 00:15:42 +0100 Subject: Change to Hashtables to reduce the chance of a ConcurrentModificationException pulling group/user data in an Async thread. --- .../src/org/anjocaido/groupmanager/dataholder/UsersDataHolder.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/UsersDataHolder.java') diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/UsersDataHolder.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/UsersDataHolder.java index 665fe227d..3ddc2177d 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/UsersDataHolder.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/UsersDataHolder.java @@ -1,7 +1,7 @@ package org.anjocaido.groupmanager.dataholder; import java.io.File; -import java.util.HashMap; +import java.util.Hashtable; import java.util.Map; import org.anjocaido.groupmanager.data.User; @@ -22,7 +22,7 @@ public class UsersDataHolder { /** * The actual groups holder */ - private Map users = new HashMap(); + private Hashtable users = new Hashtable(); /** * Constructor @@ -53,7 +53,7 @@ public class UsersDataHolder { */ public void setUsers(Map users) { - this.users = users; + this.users = (Hashtable) users; } /** -- cgit v1.2.3 From 736a6d273abb000c81b17d0142ce358d2225f873 Mon Sep 17 00:00:00 2001 From: snowleo Date: Mon, 10 Sep 2012 19:06:17 +0200 Subject: Revert bad synchronization This reverts commit 96ab1b4533b62464b8325373e677209290bced3e. --- .../src/org/anjocaido/groupmanager/dataholder/UsersDataHolder.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/UsersDataHolder.java') diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/UsersDataHolder.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/UsersDataHolder.java index 3ddc2177d..665fe227d 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/UsersDataHolder.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/UsersDataHolder.java @@ -1,7 +1,7 @@ package org.anjocaido.groupmanager.dataholder; import java.io.File; -import java.util.Hashtable; +import java.util.HashMap; import java.util.Map; import org.anjocaido.groupmanager.data.User; @@ -22,7 +22,7 @@ public class UsersDataHolder { /** * The actual groups holder */ - private Hashtable users = new Hashtable(); + private Map users = new HashMap(); /** * Constructor @@ -53,7 +53,7 @@ public class UsersDataHolder { */ public void setUsers(Map users) { - this.users = (Hashtable) users; + this.users = users; } /** -- cgit v1.2.3 From 1cf0ebbd7f120c0b8d421cc459f2d5a1386d82dc Mon Sep 17 00:00:00 2001 From: snowleo Date: Mon, 10 Sep 2012 20:49:07 +0200 Subject: Thread safety for GM --- .../anjocaido/groupmanager/dataholder/UsersDataHolder.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/UsersDataHolder.java') diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/UsersDataHolder.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/UsersDataHolder.java index 665fe227d..8a3c4c102 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/UsersDataHolder.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/UsersDataHolder.java @@ -1,6 +1,7 @@ package org.anjocaido.groupmanager.dataholder; import java.io.File; +import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -22,7 +23,7 @@ public class UsersDataHolder { /** * The actual groups holder */ - private Map users = new HashMap(); + private final Map users = Collections.synchronizedMap(new HashMap()); /** * Constructor @@ -35,12 +36,14 @@ public class UsersDataHolder { this.dataSource = dataSource; //push this data source to the users, so they pull the correct groups data. + synchronized(users) { for (User user : users.values()) user.setDataSource(this.dataSource); - + } } /** + * Note: Iteration over this object has to be synchronized! * @return the users */ public Map getUsers() { @@ -51,9 +54,8 @@ public class UsersDataHolder { /** * @param users the users to set */ - public void setUsers(Map users) { - - this.users = users; + public void resetUsers() { + this.users.clear(); } /** -- cgit v1.2.3