WiIIiam278 / PAPIProxyBridge

A bridge library plugin for using PlaceholderAPI on proxy servers
https://william278.net/project/papiproxybridge
Apache License 2.0
37 stars 11 forks source link

velocity: plugin can block velocity event execution thread #69

Closed xiaozhangup closed 1 year ago

xiaozhangup commented 1 year ago

From Arthas

"Velocity Async Event Executor - #4" Id=117 BLOCKED on java.util.concurrent.ConcurrentHashMap$Node@71956c23 owned by "Velocity Async Event Executor - #3" Id=114
    at java.base@19.0.2/java.util.concurrent.ConcurrentHashMap.putVal(ConcurrentHashMap.java:1031)
    -  blocked on java.util.concurrent.ConcurrentHashMap$Node@71956c23
    at java.base@19.0.2/java.util.concurrent.ConcurrentHashMap.put(ConcurrentHashMap.java:1006)
    at net.william278.papiproxybridge.ProxyPAPIProxyBridge.createRequest(ProxyPAPIProxyBridge.java:46)
    at net.william278.papiproxybridge.api.PlaceholderAPI.formatPlaceholders(PlaceholderAPI.java:121)
    at net.william278.papiproxybridge.api.PlaceholderAPI.lambda$formatPlaceholders$4(PlaceholderAPI.java:173)
    at net.william278.papiproxybridge.api.PlaceholderAPI$$Lambda$2261/0x0000000801d9c4c0.apply(Unknown Source)
    at java.base@19.0.2/java.util.Optional.map(Optional.java:260)
    at net.william278.papiproxybridge.api.PlaceholderAPI.formatPlaceholders(PlaceholderAPI.java:173)
    at net.william278.velocitab.hook.PAPIProxyBridgeHook.formatPlaceholders(PAPIProxyBridgeHook.java:40)
    at net.william278.velocitab.config.Placeholder.lambda$replace$14(Placeholder.java:69)
    at net.william278.velocitab.config.Placeholder$$Lambda$2259/0x0000000801d98e98.apply(Unknown Source)
    at java.base@19.0.2/java.util.Optional.map(Optional.java:260)
    at net.william278.velocitab.config.Placeholder.replace(Placeholder.java:69)
    at net.william278.velocitab.tab.PlayerTabList.getFooter(PlayerTabList.java:211)
    at net.william278.velocitab.player.TabPlayer.lambda$sendHeaderAndFooter$4(TabPlayer.java:109)
    at net.william278.velocitab.player.TabPlayer$$Lambda$2269/0x0000000801d99748.accept(Unknown Source)
    at java.base@19.0.2/java.util.concurrent.CompletableFuture$UniAccept.tryFire(CompletableFuture.java:718)
    at java.base@19.0.2/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)
    at java.base@19.0.2/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2179)
    at net.william278.papiproxybridge.user.ProxyUser.lambda$handlePluginMessage$0(ProxyUser.java:36)
    at net.william278.papiproxybridge.user.ProxyUser$$Lambda$2281/0x0000000801d9d3c0.apply(Unknown Source)
    at java.base@19.0.2/java.util.concurrent.ConcurrentHashMap.computeIfPresent(ConcurrentHashMap.java:1828)
    -  locked java.util.concurrent.ConcurrentHashMap$Node@4988298e **`<---- but blocks 32 other threads!`**
    at net.william278.papiproxybridge.user.ProxyUser.handlePluginMessage(ProxyUser.java:35)
    at net.william278.papiproxybridge.PAPIProxyBridge.handlePluginMessage(PAPIProxyBridge.java:80)
    at net.william278.papiproxybridge.VelocityPAPIProxyBridge.onPluginMessageReceived(VelocityPAPIProxyBridge.java:79)
    at java.base@19.0.2/java.lang.invoke.DirectMethodHandle$Holder.invokeVirtual(DirectMethodHandle$Holder)
    at java.base@19.0.2/java.lang.invoke.LambdaForm$MH/0x0000000801dac400.invoke(LambdaForm$MH)
    at java.base@19.0.2/java.lang.invoke.LambdaForm$MH/0x00000008010c8000.invokeExact_MT(LambdaForm$MH)
    at net.william278.papiproxybridge.Lmbda$24.execute(Unknown Source)
    at app//com.velocitypowered.proxy.event.UntargetedEventHandler$VoidHandler.lambda$buildHandler$0(UntargetedEventHandler.java:56)
    at app//com.velocitypowered.proxy.event.UntargetedEventHandler$VoidHandler$$Lambda$479/0x00000008015399e8.executeAsync(Unknown Source)
    at app//com.velocitypowered.proxy.event.VelocityEventManager.fire(VelocityEventManager.java:597)
    at app//com.velocitypowered.proxy.event.VelocityEventManager.lambda$fire$5(VelocityEventManager.java:478)
    at app//com.velocitypowered.proxy.event.VelocityEventManager$$Lambda$484/0x00000008015851b0.run(Unknown Source)
    at java.base@19.0.2/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
    at java.base@19.0.2/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
    at java.base@19.0.2/java.lang.Thread.run(Thread.java:1589)

    Number of locked synchronizers = 1
    - java.util.concurrent.ThreadPoolExecutor$Worker@503f5a79
xiaozhangup commented 1 year ago

I made a modification in my own branch to try and resolve this issue. You can either try it yourself or wait for my feedback.

xiaozhangup commented 1 year ago

https://github.com/xiaozhangup/PAPIProxyBridge/commit/9e060d01677d135c2e1858709333a81c57d2fdc9

From: https://blog.csdn.net/lx1848/article/details/81256443 I will do some test for this

xiaozhangup commented 1 year ago

https://github.com/WiIIiam278/PAPIProxyBridge/pull/72

Seem well now

WiIIiam278 commented 1 year ago

closed in #72