Commit 9dfab9fc7eddb6b30ca5592d2d56a01022ee3d80

Authored by Mumfrey
1 parent 7b19b205

Hopefully fix CME in client permissions manager, closes #25

src/main/java/com/mumfrey/liteloader/permissions/PermissionsManagerClient.java
@@ -47,37 +47,37 @@ public final class PermissionsManagerClient implements PermissionsManager, Plugi @@ -47,37 +47,37 @@ public final class PermissionsManagerClient implements PermissionsManager, Plugi
47 * Permissions permissible which is a proxy for permissions that are common 47 * Permissions permissible which is a proxy for permissions that are common
48 * to all mods. 48 * to all mods.
49 */ 49 */
50 - private static Permissible allMods = new PermissibleAllMods();  
51 -  
52 - /**  
53 - * Minecraft instance  
54 - */  
55 - private GameEngine<?, ?> engine; 50 + private final static Permissible allMods = new PermissibleAllMods();
56 51
57 /** 52 /**
58 * List of registered client mods supporting permissions 53 * List of registered client mods supporting permissions
59 */ 54 */
60 - private Map<String, Permissible> registeredClientMods = new HashMap<String, Permissible>(); 55 + private final Map<String, Permissible> registeredClientMods = new HashMap<String, Permissible>();
61 56
62 /** 57 /**
63 * List of registered client permissions, grouped by mod 58 * List of registered client permissions, grouped by mod
64 */ 59 */
65 - private Map<Permissible, TreeSet<String>> registeredClientPermissions = new HashMap<Permissible, TreeSet<String>>(); 60 + private final Map<Permissible, TreeSet<String>> registeredClientPermissions = new HashMap<Permissible, TreeSet<String>>();
66 61
67 /** 62 /**
68 * Objects which listen to events generated by this object 63 * Objects which listen to events generated by this object
69 */ 64 */
70 - private Set<Permissible> permissibles = new HashSet<Permissible>(); 65 + private final Set<Permissible> permissibles = new HashSet<Permissible>();
71 66
72 /** 67 /**
73 * Local permissions, used when server permissions are not available 68 * Local permissions, used when server permissions are not available
74 */ 69 */
75 - private LocalPermissions localPermissions = new LocalPermissions(); 70 + private final LocalPermissions localPermissions = new LocalPermissions();
76 71
77 /** 72 /**
78 * Server permissions, indexed by mod 73 * Server permissions, indexed by mod
79 */ 74 */
80 - private Map<String, ServerPermissions> serverPermissions = new HashMap<String, ServerPermissions>(); 75 + private final Map<String, ServerPermissions> serverPermissions = new HashMap<String, ServerPermissions>();
  76 +
  77 + /**
  78 + * Minecraft instance
  79 + */
  80 + private GameEngine<?, ?> engine;
81 81
82 /** 82 /**
83 * Last time onTick was called, used to detect tamper condition if no ticks 83 * Last time onTick was called, used to detect tamper condition if no ticks
@@ -124,8 +124,11 @@ public final class PermissionsManagerClient implements PermissionsManager, Plugi @@ -124,8 +124,11 @@ public final class PermissionsManagerClient implements PermissionsManager, Plugi
124 if (mod == null) mod = allMods; 124 if (mod == null) mod = allMods;
125 String modName = mod.getPermissibleModName(); 125 String modName = mod.getPermissibleModName();
126 126
127 - ServerPermissions modPermissions = this.serverPermissions.get(modName);  
128 - return modPermissions != null ? modPermissions : this.localPermissions; 127 + synchronized (this.serverPermissions)
  128 + {
  129 + ServerPermissions modPermissions = this.serverPermissions.get(modName);
  130 + return modPermissions != null ? modPermissions : this.localPermissions;
  131 + }
129 } 132 }
130 133
131 /* (non-Javadoc) 134 /* (non-Javadoc)
@@ -138,8 +141,11 @@ public final class PermissionsManagerClient implements PermissionsManager, Plugi @@ -138,8 +141,11 @@ public final class PermissionsManagerClient implements PermissionsManager, Plugi
138 if (mod == null) mod = allMods; 141 if (mod == null) mod = allMods;
139 String modName = mod.getPermissibleModName(); 142 String modName = mod.getPermissibleModName();
140 143
141 - ServerPermissions modPermissions = this.serverPermissions.get(modName);  
142 - return modPermissions != null ? modPermissions.getReplicationTime() : 0; 144 + synchronized (this.serverPermissions)
  145 + {
  146 + ServerPermissions modPermissions = this.serverPermissions.get(modName);
  147 + return modPermissions != null ? modPermissions.getReplicationTime() : 0;
  148 + }
143 } 149 }
144 150
145 /** 151 /**
@@ -208,7 +214,10 @@ public final class PermissionsManagerClient implements PermissionsManager, Plugi @@ -208,7 +214,10 @@ public final class PermissionsManagerClient implements PermissionsManager, Plugi
208 */ 214 */
209 protected void clearServerPermissions() 215 protected void clearServerPermissions()
210 { 216 {
211 - this.serverPermissions.clear(); 217 + synchronized (this.serverPermissions)
  218 + {
  219 + this.serverPermissions.clear();
  220 + }
212 221
213 for (Permissible permissible : this.permissibles) 222 for (Permissible permissible : this.permissibles)
214 { 223 {
@@ -264,7 +273,10 @@ public final class PermissionsManagerClient implements PermissionsManager, Plugi @@ -264,7 +273,10 @@ public final class PermissionsManagerClient implements PermissionsManager, Plugi
264 } 273 }
265 else 274 else
266 { 275 {
267 - this.serverPermissions.remove(modName); 276 + synchronized (this.serverPermissions)
  277 + {
  278 + this.serverPermissions.remove(modName);
  279 + }
268 } 280 }
269 } 281 }
270 282
@@ -289,12 +301,15 @@ public final class PermissionsManagerClient implements PermissionsManager, Plugi @@ -289,12 +301,15 @@ public final class PermissionsManagerClient implements PermissionsManager, Plugi
289 } 301 }
290 } 302 }
291 303
292 - for (Map.Entry<String, ServerPermissions> modPermissions : this.serverPermissions.entrySet()) 304 + synchronized (this.serverPermissions)
293 { 305 {
294 - if (!modPermissions.getValue().isValid()) 306 + for (Map.Entry<String, ServerPermissions> modPermissions : this.serverPermissions.entrySet())
295 { 307 {
296 - modPermissions.getValue().notifyRefreshPending();  
297 - this.sendPermissionQuery(this.registeredClientMods.get(modPermissions.getKey())); 308 + if (!modPermissions.getValue().isValid())
  309 + {
  310 + modPermissions.getValue().notifyRefreshPending();
  311 + this.sendPermissionQuery(this.registeredClientMods.get(modPermissions.getKey()));
  312 + }
298 } 313 }
299 } 314 }
300 315
@@ -336,7 +351,10 @@ public final class PermissionsManagerClient implements PermissionsManager, Plugi @@ -336,7 +351,10 @@ public final class PermissionsManagerClient implements PermissionsManager, Plugi
336 351
337 if (modPermissions != null && modPermissions.getModName() != null) 352 if (modPermissions != null && modPermissions.getModName() != null)
338 { 353 {
339 - this.serverPermissions.put(modPermissions.getModName(), modPermissions); 354 + synchronized (this.serverPermissions)
  355 + {
  356 + this.serverPermissions.put(modPermissions.getModName(), modPermissions);
  357 + }
340 358
341 Permissible permissible = this.registeredClientMods.get(modPermissions.getModName()); 359 Permissible permissible = this.registeredClientMods.get(modPermissions.getModName());
342 if (permissible != null) permissible.onPermissionsChanged(this); 360 if (permissible != null) permissible.onPermissionsChanged(this);