From d0e9d44152fee6ad905194be7b85eaa3f5805269 Mon Sep 17 00:00:00 2001 From: Julian Krings Date: Wed, 27 Aug 2025 00:33:59 +0200 Subject: [PATCH] fix random null pointer in the resource loader --- .../iris/core/loader/ResourceLoader.java | 42 ++++++++----------- 1 file changed, 18 insertions(+), 24 deletions(-) diff --git a/core/src/main/java/com/volmit/iris/core/loader/ResourceLoader.java b/core/src/main/java/com/volmit/iris/core/loader/ResourceLoader.java index a9b468e57..15c2f409e 100644 --- a/core/src/main/java/com/volmit/iris/core/loader/ResourceLoader.java +++ b/core/src/main/java/com/volmit/iris/core/loader/ResourceLoader.java @@ -23,6 +23,7 @@ import com.volmit.iris.Iris; import com.volmit.iris.core.IrisSettings; import com.volmit.iris.core.project.SchemaBuilder; import com.volmit.iris.core.service.PreservationSVC; +import com.volmit.iris.engine.data.cache.AtomicCache; import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.engine.framework.MeteredCache; import com.volmit.iris.util.collection.KList; @@ -45,9 +46,7 @@ import lombok.ToString; import java.io.*; import java.util.Locale; -import java.util.Objects; import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.atomic.AtomicReference; import java.util.function.Consumer; import java.util.function.Predicate; import java.util.stream.Stream; @@ -60,7 +59,7 @@ import java.util.zip.GZIPOutputStream; public class ResourceLoader implements MeteredCache { public static final AtomicDouble tlt = new AtomicDouble(0); private static final int CACHE_SIZE = 100000; - protected final AtomicReference> folderCache; + protected final AtomicCache> folderCache; protected KSet firstAccess; protected File root; protected String folderName; @@ -76,7 +75,7 @@ public class ResourceLoader implements MeteredCache { public ResourceLoader(File root, IrisData manager, String folderName, String resourceTypeName, Class objectClass) { this.manager = manager; firstAccess = new KSet<>(); - folderCache = new AtomicReference<>(); + folderCache = new AtomicCache<>(); sec = new ChronoLatch(5000); loads = new AtomicInteger(); this.objectClass = objectClass; @@ -361,29 +360,24 @@ public class ResourceLoader implements MeteredCache { } public KList getFolders() { - synchronized (folderCache) { - if (folderCache.get() == null) { - KList fc = new KList<>(); + return folderCache.aquire(() -> { + KList fc = new KList<>(); - File[] files = root.listFiles(); - if (files == null) { - throw new IllegalStateException("Failed to list files in " + root); - } + File[] files = root.listFiles(); + if (files == null) { + throw new IllegalStateException("Failed to list files in " + root); + } - for (File i : files) { - if (i.isDirectory()) { - if (i.getName().equals(folderName)) { - fc.add(i); - break; - } + for (File i : files) { + if (i.isDirectory()) { + if (i.getName().equals(folderName)) { + fc.add(i); + break; } } - - folderCache.set(fc); } - } - - return folderCache.get(); + return fc; + }); } public KList getFolders(String rc) { @@ -403,7 +397,7 @@ public class ResourceLoader implements MeteredCache { public void clearCache() { possibleKeys = null; loadCache.invalidate(); - folderCache.set(null); + folderCache.reset(); } public File fileFor(T b) { @@ -429,7 +423,7 @@ public class ResourceLoader implements MeteredCache { } public void clearList() { - folderCache.set(null); + folderCache.reset(); possibleKeys = null; }