9
0
mirror of https://github.com/VolmitSoftware/Iris.git synced 2025-12-19 15:09:18 +00:00

fix random null pointer in the resource loader

This commit is contained in:
Julian Krings
2025-08-27 00:33:59 +02:00
parent 2cdffaae33
commit d0e9d44152

View File

@@ -23,6 +23,7 @@ import com.volmit.iris.Iris;
import com.volmit.iris.core.IrisSettings; import com.volmit.iris.core.IrisSettings;
import com.volmit.iris.core.project.SchemaBuilder; import com.volmit.iris.core.project.SchemaBuilder;
import com.volmit.iris.core.service.PreservationSVC; 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.Engine;
import com.volmit.iris.engine.framework.MeteredCache; import com.volmit.iris.engine.framework.MeteredCache;
import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.collection.KList;
@@ -45,9 +46,7 @@ import lombok.ToString;
import java.io.*; import java.io.*;
import java.util.Locale; import java.util.Locale;
import java.util.Objects;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.function.Predicate; import java.util.function.Predicate;
import java.util.stream.Stream; import java.util.stream.Stream;
@@ -60,7 +59,7 @@ import java.util.zip.GZIPOutputStream;
public class ResourceLoader<T extends IrisRegistrant> implements MeteredCache { public class ResourceLoader<T extends IrisRegistrant> implements MeteredCache {
public static final AtomicDouble tlt = new AtomicDouble(0); public static final AtomicDouble tlt = new AtomicDouble(0);
private static final int CACHE_SIZE = 100000; private static final int CACHE_SIZE = 100000;
protected final AtomicReference<KList<File>> folderCache; protected final AtomicCache<KList<File>> folderCache;
protected KSet<String> firstAccess; protected KSet<String> firstAccess;
protected File root; protected File root;
protected String folderName; protected String folderName;
@@ -76,7 +75,7 @@ public class ResourceLoader<T extends IrisRegistrant> implements MeteredCache {
public ResourceLoader(File root, IrisData manager, String folderName, String resourceTypeName, Class<? extends T> objectClass) { public ResourceLoader(File root, IrisData manager, String folderName, String resourceTypeName, Class<? extends T> objectClass) {
this.manager = manager; this.manager = manager;
firstAccess = new KSet<>(); firstAccess = new KSet<>();
folderCache = new AtomicReference<>(); folderCache = new AtomicCache<>();
sec = new ChronoLatch(5000); sec = new ChronoLatch(5000);
loads = new AtomicInteger(); loads = new AtomicInteger();
this.objectClass = objectClass; this.objectClass = objectClass;
@@ -361,8 +360,7 @@ public class ResourceLoader<T extends IrisRegistrant> implements MeteredCache {
} }
public KList<File> getFolders() { public KList<File> getFolders() {
synchronized (folderCache) { return folderCache.aquire(() -> {
if (folderCache.get() == null) {
KList<File> fc = new KList<>(); KList<File> fc = new KList<>();
File[] files = root.listFiles(); File[] files = root.listFiles();
@@ -378,12 +376,8 @@ public class ResourceLoader<T extends IrisRegistrant> implements MeteredCache {
} }
} }
} }
return fc;
folderCache.set(fc); });
}
}
return folderCache.get();
} }
public KList<File> getFolders(String rc) { public KList<File> getFolders(String rc) {
@@ -403,7 +397,7 @@ public class ResourceLoader<T extends IrisRegistrant> implements MeteredCache {
public void clearCache() { public void clearCache() {
possibleKeys = null; possibleKeys = null;
loadCache.invalidate(); loadCache.invalidate();
folderCache.set(null); folderCache.reset();
} }
public File fileFor(T b) { public File fileFor(T b) {
@@ -429,7 +423,7 @@ public class ResourceLoader<T extends IrisRegistrant> implements MeteredCache {
} }
public void clearList() { public void clearList() {
folderCache.set(null); folderCache.reset();
possibleKeys = null; possibleKeys = null;
} }