From 338bc56ceb8a1fc92eb9c2df45c580f690b9c74c Mon Sep 17 00:00:00 2001 From: Sotr Date: Sat, 30 Mar 2019 14:05:02 +0800 Subject: [PATCH] Synchronized permission subscriptions --- .../java/org/bukkit/plugin/SimplePluginManager.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/api/main/java/org/bukkit/plugin/SimplePluginManager.java b/src/api/main/java/org/bukkit/plugin/SimplePluginManager.java index 995560f36..7959ed6a7 100644 --- a/src/api/main/java/org/bukkit/plugin/SimplePluginManager.java +++ b/src/api/main/java/org/bukkit/plugin/SimplePluginManager.java @@ -39,6 +39,7 @@ import org.bukkit.permissions.Permissible; import org.bukkit.permissions.Permission; import org.bukkit.permissions.PermissionDefault; import org.bukkit.util.FileUtil; +import org.checkerframework.common.reflection.qual.NewInstance; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Maps; @@ -58,9 +59,10 @@ public final class SimplePluginManager implements PluginManager { private final Map lookupNames = HashObjObjMaps.newMutableMap(); // Akarin private File updateDirectory; private final SimpleCommandMap commandMap; - private Map permissions = HashObjObjMaps.newMutableMap(); // Akarin + private Map permissions = Collections.emptyMap(); // Akarin private HashIntObjMap> defaultPerms = HashIntObjMaps.newImmutableMap(HashObjSets.newImmutableSetOf(0, 1), HashObjSets.newImmutableSetOf(HashObjSets.newMutableSet(), HashObjSets.newMutableSet())); // Akarin private final Map> permSubs = HashObjObjMaps.newMutableMap(); // Akarin + private final Object permSubsLock = new Object(); private final Map> defSubs = HashObjObjMaps.newMutableMap(); // Akarin private boolean useTimings = false; @@ -730,6 +732,7 @@ public final class SimplePluginManager implements PluginManager { public void subscribeToPermission(@Nonnull String permission, @Nonnull Permissible permissible) { // Akarin - javax.annotation String name = permission.toLowerCase(java.util.Locale.ENGLISH); + synchronized (permSubsLock) { // Akarin Map map = permSubs.get(name); if (map == null) { @@ -738,10 +741,12 @@ public final class SimplePluginManager implements PluginManager { } map.put(permissible, true); + } // Akarin } public void unsubscribeFromPermission(@Nonnull String permission, @Nonnull Permissible permissible) { // Akarin - javax.annotation String name = permission.toLowerCase(java.util.Locale.ENGLISH); + synchronized (permSubsLock) { // Akarin Map map = permSubs.get(name); if (map != null) { @@ -751,11 +756,13 @@ public final class SimplePluginManager implements PluginManager { permSubs.remove(name); } } + } // Akarin } @Nonnull // Akarin - javax.annotation public Set getPermissionSubscriptions(@Nonnull String permission) { // Akarin - javax.annotation String name = permission.toLowerCase(java.util.Locale.ENGLISH); + synchronized (permSubsLock) { // Akarin Map map = permSubs.get(name); if (map == null) { @@ -763,6 +770,7 @@ public final class SimplePluginManager implements PluginManager { } else { return ImmutableSet.copyOf(map.keySet()); } + } // Akarin } public void subscribeToDefaultPerms(boolean op, @Nonnull Permissible permissible) { // Akarin - javax.annotation