Commit 644801736472ca531da483d67432df8342078110
1 parent
7a3302ea
Hopefully fix CME in client permissions manager, closes #25
Showing
1 changed file
with
40 additions
and
22 deletions
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); |