From 14c793f5a32e35a9d9fffe02544df4e5cf6433e1 Mon Sep 17 00:00:00 2001 From: SirYwell Date: Mon, 28 Jul 2025 18:45:29 +0200 Subject: [PATCH] Fully replace ThreadLocal in Request with CHM --- .../worldedit/session/request/Request.java | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/session/request/Request.java b/worldedit-core/src/main/java/com/sk89q/worldedit/session/request/Request.java index 489caf5fcf..1b9a4bb062 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/session/request/Request.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/session/request/Request.java @@ -31,13 +31,11 @@ import java.util.concurrent.ConcurrentHashMap; /** - * Describes the current request using a {@link ThreadLocal}. + * Describes the current request using a {@link ConcurrentHashMap}. */ public final class Request { - private static final ThreadLocal threadLocal = ThreadLocal.withInitial(Request::new); - //FAWE start - // TODO any better way to deal with this? + //FAWE start use CHM instead of ThreadLocal private static final Map requests = new ConcurrentHashMap<>(); //FAWE end @@ -56,9 +54,6 @@ public final class Request { //FAWE end private Request() { - //FAWE start - requests.put(Thread.currentThread(), this); - //FAWE end } //FAWE start @@ -162,17 +157,18 @@ public void setEditSession(@Nullable EditSession editSession) { * @return the current request */ public static Request request() { - return threadLocal.get(); + return requests.computeIfAbsent(Thread.currentThread(), t -> new Request()); } /** * Reset the current request and clear all fields. */ public static void reset() { - request().invalidate(); - threadLocal.remove(); //FAWE start - requests.remove(Thread.currentThread()); + Request request = requests.remove(Thread.currentThread()); + if (request != null) { + request.invalidate(); + } //FAWE end }