Server thread locked.
azbh111 opened this issue ยท 5 comments
public boolean isMatches(String expression, String permission)
{
try
{
Pattern permissionMatcher = (Pattern)this.patternCache.get(expression);
return permissionMatcher.matcher(permission).matches();
} catch (ExecutionException e) {
ErrorReport.handleError("While checking for regex match for " + permission + " against expression " + expression, e);
}return false;
}
[19:24:08] ------------------------------
[19:24:08] Current Thread: Server thread
[19:24:08] PID: 19 | Suspended: false | Native: false | State: RUNNABLE
[19:24:08] Thread is waiting on monitor(s):
[19:24:08] Locked on:guava10.com.google.common.cache.CustomConcurrentHashMap$ComputingValueReference.setComputedValue(CustomConcurrentHashMap.java:3448)
[19:24:08] Locked on:guava10.com.google.common.cache.CustomConcurrentHashMap$Segment.compute(CustomConcurrentHashMap.java:2322)
[19:24:08] Locked on:ru.tehkode.permissions.bukkit.regexperms.PermissiblePEX.permissionValue(PermissiblePEX.java:241)
[19:24:08] Locked on:org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:492)
[19:24:08] Locked on:net.minecraft.network.NetworkSystem.func_151269_c(NetworkSystem.java:181)
[19:24:08] Stack:
[19:24:08] java.lang.Object.notifyAll(Native Method)
[19:24:08] guava10.com.google.common.cache.CustomConcurrentHashMap$ComputingValueReference.setComputedValue(CustomConcurrentHashMap.java:3448)
[19:24:08] guava10.com.google.common.cache.CustomConcurrentHashMap$ComputingValueReference.compute(CustomConcurrentHashMap.java:3440)
[19:24:08] guava10.com.google.common.cache.CustomConcurrentHashMap$Segment.compute(CustomConcurrentHashMap.java:2322)
[19:24:08] guava10.com.google.common.cache.CustomConcurrentHashMap$Segment.getOrCompute(CustomConcurrentHashMap.java:2291)
[19:24:08] guava10.com.google.common.cache.CustomConcurrentHashMap.getOrCompute(CustomConcurrentHashMap.java:3802)
[19:24:08] guava10.com.google.common.cache.ComputingCache.get(ComputingCache.java:46)
[19:24:08] ru.tehkode.permissions.RegExpMatcher.isMatches(RegExpMatcher.java:27)
[19:24:08] ru.tehkode.permissions.bukkit.regexperms.PermissiblePEX.checkSingle(PermissiblePEX.java:213)
[19:24:08] ru.tehkode.permissions.bukkit.regexperms.PermissiblePEX.permissionValue(PermissiblePEX.java:241)
[19:24:08] ru.tehkode.permissions.bukkit.regexperms.PermissiblePEX.hasPermission(PermissiblePEX.java:127)
[19:24:08] org.bukkit.craftbukkit.v1_7_R4.entity.CraftHumanEntity.hasPermission(CraftHumanEntity.java:102)
[19:24:08] ru.tehkode.permissions.bukkit.regexperms.PEXPermissionSubscriptionMap$PEXSubscriptionValueMap.keySet(PEXPermissionSubscriptionMap.java:169)
[19:24:08] org.bukkit.plugin.SimplePluginManager.getPermissionSubscriptions(SimplePluginManager.java:683)
[19:24:08] org.bukkit.permissions.Permission.getPermissibles(Permission.java:152)
[19:24:08] org.bukkit.permissions.Permission.recalculatePermissibles(Permission.java:162)
[19:24:08] org.bukkit.permissions.Permission.(Permission.java:66)
[19:24:08] org.bukkit.permissions.Permission.(Permission.java:35)
[19:24:08] com.bekvon.bukkit.residence.protection.FlagPermissions.getPosibleFlags(FlagPermissions.java:691)
[19:24:08] com.bekvon.bukkit.residence.gui.SetFlag.recalculateResidence(SetFlag.java:150)
[19:24:08] com.bekvon.bukkit.residence.gui.SetFlag.recalculateInv(SetFlag.java:121)
[19:24:08] com.bekvon.bukkit.residence.listeners.ResidencePlayerListener.onFlagGuiClick(ResidencePlayerListener.java:397)
[19:24:08] sun.reflect.GeneratedMethodAccessor160.invoke(Unknown Source)
[19:24:08] sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
[19:24:08] java.lang.reflect.Method.invoke(Unknown Source)
[19:24:08] org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:334)
[19:24:08] org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
[19:24:08] org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:507)
[19:24:08] org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:492)
[19:24:08] net.minecraft.network.NetHandlerPlayServer.func_147351_a(NetHandlerPlayServer.java:2069)
[19:24:08] net.minecraft.network.play.client.C0EPacketClickWindow.func_148833_a(SourceFile:32)
[19:24:08] net.minecraft.network.play.client.C0EPacketClickWindow.func_148833_a(SourceFile:10)
[19:24:08] net.minecraft.network.NetworkManager.func_74428_b(NetworkManager.java:245)
[19:24:08] net.minecraft.network.NetworkSystem.func_151269_c(NetworkSystem.java:181)
[19:24:08] net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:1023)
[19:24:08] net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:432)
[19:24:08] net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:841)
[19:24:08] net.minecraft.server.MinecraftServer.run(MinecraftServer.java:693)
[19:24:08] java.lang.Thread.run(Unknown Source)
[19:24:08] ##------------------------------
What is Thermos? I've never heard of it before.
Generally there are no guarantees of thread-safety given to the superperms system, so concurrency support is mostly just luck.
Thermos is the follow up of Cauldron or ForgeSpigot if you prefer.
Minecraft networking is multi-threaded, so how would superperms work without thread safety?
Unfortunately PermissionsEx is currently unmaintained and no further updates are planned. Because of this, all pull requests are being closed. If you are looking for an actively maintained permissions plugin, take a look at LuckPerms. It is compatible with major server platforms and can import data from PEX.