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 --- .../groupmanager/dataholder/WorldDataHolder.java | 29 ++++++++++++++++------ 1 file changed, 22 insertions(+), 7 deletions(-) (limited to 'EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/WorldDataHolder.java') diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/WorldDataHolder.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/WorldDataHolder.java index aad59e5aa..4d85eff68 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/WorldDataHolder.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/WorldDataHolder.java @@ -319,8 +319,9 @@ public class WorldDataHolder { * @return a collection of the groups */ public Collection getGroupList() { - - return getGroups().values(); + synchronized(getGroups()) { + return new ArrayList(getGroups().values()); + } } /** @@ -328,8 +329,9 @@ public class WorldDataHolder { * @return a collection of the users */ public Collection getUserList() { - - return getUsers().values(); + synchronized(getUsers()) { + return new ArrayList(getUsers().values()); + } } /** @@ -944,6 +946,7 @@ public class WorldDataHolder { Map groupsMap = new HashMap(); root.put("groups", groupsMap); + synchronized(ph.getGroups()) { for (String groupKey : ph.getGroups().keySet()) { Group group = ph.getGroups().get(groupKey); @@ -966,6 +969,7 @@ public class WorldDataHolder { aGroupMap.put("permissions", group.getPermissionList()); } + } if (!root.isEmpty()) { DumperOptions opt = new DumperOptions(); @@ -1031,6 +1035,7 @@ public class WorldDataHolder { Map usersMap = new HashMap(); root.put("users", usersMap); + synchronized(ph.getUsers()) { for (String userKey : ph.getUsers().keySet()) { User user = ph.getUsers().get(userKey); if ((user.getGroup() == null || user.getGroup().equals(ph.getDefaultGroup())) && user.getPermissionList().isEmpty() && user.getVariables().isEmpty() && user.isSubGroupsEmpty()) { @@ -1060,6 +1065,7 @@ public class WorldDataHolder { aUserMap.put("subgroups", user.subGroupListStringCopy()); // END SUBGROUPS NODE - BETA } + } if (!root.isEmpty()) { DumperOptions opt = new DumperOptions(); @@ -1159,11 +1165,13 @@ public class WorldDataHolder { if (users.HaveUsersChanged()) { return true; } + synchronized(users.getUsers()) { for (User u : users.getUsers().values()) { if (u.isChanged()) { return true; } } + } return false; } @@ -1184,11 +1192,13 @@ public class WorldDataHolder { if (groups.HaveGroupsChanged()) { return true; } + synchronized(groups.getGroups()) { for (Group g : groups.getGroups().values()) { if (g.isChanged()) { return true; } } + } return false; } @@ -1198,9 +1208,11 @@ public class WorldDataHolder { public void removeUsersChangedFlag() { setUsersChanged(false); + synchronized(getUsers()) { for (User u : getUsers().values()) { u.flagAsSaved(); } + } } /** @@ -1209,9 +1221,11 @@ public class WorldDataHolder { public void removeGroupsChangedFlag() { setGroupsChanged(false); + synchronized(getGroups()) { for (Group g : getGroups().values()) { g.flagAsSaved(); } + } } /** @@ -1260,18 +1274,18 @@ public class WorldDataHolder { public void resetGroups() { // setDefaultGroup(null); - groups.setGroups(new HashMap()); + groups.resetGroups(); } /** * Resets Users */ public void resetUsers() { - - users.setUsers(new HashMap()); + users.resetUsers(); } /** + * Note: Iteration over this object has to be synchronized! * @return the groups */ public Map getGroups() { @@ -1280,6 +1294,7 @@ public class WorldDataHolder { } /** + * Note: Iteration over this object has to be synchronized! * @return the users */ public Map getUsers() { -- cgit v1.2.3