From 71dd5c9f4d4ed4c01e2043b1b1f4007f85208c5c Mon Sep 17 00:00:00 2001 From: LexManos Date: Tue, 5 Feb 2019 22:42:21 -0800 Subject: [PATCH] Properly set context classloader in mod loading threads. --- src/main/java/net/minecraftforge/fml/ModList.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/minecraftforge/fml/ModList.java b/src/main/java/net/minecraftforge/fml/ModList.java index 8c9af833e..396e44190 100644 --- a/src/main/java/net/minecraftforge/fml/ModList.java +++ b/src/main/java/net/minecraftforge/fml/ModList.java @@ -34,6 +34,7 @@ import java.util.Objects; import java.util.Optional; import java.util.concurrent.ExecutionException; import java.util.concurrent.ForkJoinPool; +import java.util.concurrent.ForkJoinWorkerThread; import java.util.concurrent.FutureTask; import java.util.function.BiConsumer; import java.util.function.Consumer; @@ -55,7 +56,14 @@ public class ModList private final Map fileById; private List mods; private Map indexedMods; - private ForkJoinPool modLoadingThreadPool = new ForkJoinPool(); + private ForkJoinPool modLoadingThreadPool = new ForkJoinPool(Runtime.getRuntime().availableProcessors(), pool -> + { + ForkJoinWorkerThread thread = ForkJoinPool.defaultForkJoinWorkerThreadFactory.newThread(pool); + thread.setName("modloading-worker-" + thread.getPoolIndex()); + // The default sets it to the SystemClassloader, so copy the current one. + thread.setContextClassLoader(Thread.currentThread().getContextClassLoader()); + return thread; + }, null, false); private List modFileScanData; private ModList(final List modFiles, final List sortedList) @@ -131,7 +139,7 @@ public class ModList { return Optional.ofNullable(this.indexedMods.get(modId)); } - + public Optional getModContainerByObject(Object obj) { return mods.stream().filter(mc -> mc.getMod() == obj).findFirst();