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 --- .../src/org/anjocaido/groupmanager/data/Group.java | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'EssentialsGroupManager/src/org/anjocaido/groupmanager/data/Group.java') diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/Group.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/Group.java index 751dc8fd6..8da6ba85a 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/Group.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/Group.java @@ -23,7 +23,7 @@ public class Group extends DataUnit implements Cloneable { /** * The group it inherits DIRECTLY! */ - private ArrayList inherits = new ArrayList(); + private List inherits = Collections.unmodifiableList(Collections.emptyList()); /** * This one holds the fields in INFO node. * like prefix = 'c' @@ -75,7 +75,9 @@ public class Group extends DataUnit implements Cloneable { clone = new Group(this.getName()); } else { clone = new Group(getDataSource(), this.getName()); - clone.inherits = new ArrayList(this.getInherits()); + clone.inherits = this.getInherits().isEmpty() ? + Collections.unmodifiableList(Collections.emptyList()) + : Collections.unmodifiableList(new ArrayList(this.getInherits())); } for (String perm : this.getPermissionList()) { @@ -102,7 +104,9 @@ public class Group extends DataUnit implements Cloneable { // Don't add inheritance for GlobalGroups if (!isGlobal()) { - clone.inherits = new ArrayList(this.getInherits()); + clone.inherits = this.getInherits().isEmpty() ? + Collections.unmodifiableList(Collections.emptyList()) + : Collections.unmodifiableList(new ArrayList(this.getInherits())); } for (String perm : this.getPermissionList()) { clone.addPermission(perm); @@ -120,8 +124,7 @@ public class Group extends DataUnit implements Cloneable { * @return the inherits */ public List getInherits() { - - return Collections.unmodifiableList(inherits); + return inherits; } /** @@ -134,7 +137,9 @@ public class Group extends DataUnit implements Cloneable { getDataSource().addGroup(inherit); } if (!inherits.contains(inherit.getName().toLowerCase())) { - inherits.add(inherit.getName().toLowerCase()); + List clone = new ArrayList(inherits); + clone.add(inherit.getName().toLowerCase()); + inherits = Collections.unmodifiableList(clone); } flagAsChanged(); if (GroupManager.isLoaded()) { @@ -148,7 +153,9 @@ public class Group extends DataUnit implements Cloneable { if (!isGlobal()) { if (this.inherits.contains(inherit.toLowerCase())) { - this.inherits.remove(inherit.toLowerCase()); + List clone = new ArrayList(inherits); + clone.remove(inherit.toLowerCase()); + inherits = Collections.unmodifiableList(clone); flagAsChanged(); GroupManagerEventHandler.callEvent(this, Action.GROUP_INHERITANCE_CHANGED); return true; -- cgit v1.2.3