From 65d026a130ce47d1f46a5d77ff0f37b105ae67ef Mon Sep 17 00:00:00 2001 From: Zoe Gidiere Date: Sat, 12 Oct 2024 15:38:51 -0600 Subject: [PATCH] Fix Cache Deadlock --- .../addons/noise/samplers/CacheSampler.java | 36 ++++++++++--------- .../generation/CachingBiomeProvider.java | 36 ++++++++++--------- 2 files changed, 40 insertions(+), 32 deletions(-) diff --git a/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/samplers/CacheSampler.java b/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/samplers/CacheSampler.java index 14c42b03d..59ff6a75a 100644 --- a/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/samplers/CacheSampler.java +++ b/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/samplers/CacheSampler.java @@ -24,24 +24,28 @@ public class CacheSampler implements NoiseSampler { public CacheSampler(NoiseSampler sampler, int dimensions) { this.sampler = sampler; if (dimensions == 2) { - LoadingCache cache = Caffeine - .newBuilder() - .executor(CACHE_EXECUTOR) - .scheduler(Scheduler.systemScheduler()) - .initialCapacity(256) - .maximumSize(256) - .build(this::sampleNoise); - this.cache2D = ThreadLocal.withInitial(() -> Pair.of(new DoubleSeededVector2Key(0, 0, 0), cache).mutable()); + this.cache2D = ThreadLocal.withInitial(() -> { + LoadingCache cache = Caffeine + .newBuilder() + .executor(CACHE_EXECUTOR) + .scheduler(Scheduler.systemScheduler()) + .initialCapacity(256) + .maximumSize(256) + .build(this::sampleNoise); + return Pair.of(new DoubleSeededVector2Key(0, 0, 0), cache).mutable(); + }); this.cache3D = null; } else { - LoadingCache cache = Caffeine - .newBuilder() - .executor(CACHE_EXECUTOR) - .scheduler(Scheduler.systemScheduler()) - .initialCapacity(981504) - .maximumSize(981504) - .build(this::sampleNoise); - this.cache3D = ThreadLocal.withInitial(() -> Pair.of(new DoubleSeededVector3Key(0, 0, 0, 0), cache).mutable()); + this.cache3D = ThreadLocal.withInitial(() -> { + LoadingCache cache = Caffeine + .newBuilder() + .executor(CACHE_EXECUTOR) + .scheduler(Scheduler.systemScheduler()) + .initialCapacity(981504) + .maximumSize(981504) + .build(this::sampleNoise); + return Pair.of(new DoubleSeededVector3Key(0, 0, 0, 0), cache).mutable(); + }); this.cache2D = null; } } diff --git a/common/api/src/main/java/com/dfsek/terra/api/world/biome/generation/CachingBiomeProvider.java b/common/api/src/main/java/com/dfsek/terra/api/world/biome/generation/CachingBiomeProvider.java index 39411a6c3..3e42ff1d1 100644 --- a/common/api/src/main/java/com/dfsek/terra/api/world/biome/generation/CachingBiomeProvider.java +++ b/common/api/src/main/java/com/dfsek/terra/api/world/biome/generation/CachingBiomeProvider.java @@ -33,23 +33,27 @@ public class CachingBiomeProvider implements BiomeProvider, Handle { this.delegate = delegate; this.res = delegate.resolution(); - LoadingCache> cache = Caffeine - .newBuilder() - .executor(CACHE_EXECUTOR) - .scheduler(Scheduler.systemScheduler()) - .initialCapacity(256) - .maximumSize(256) - .build(this::sampleBiome); - this.baseCache = ThreadLocal.withInitial(() -> Pair.of(new SeededVector2Key(0, 0, 0), cache).mutable()); + this.baseCache = ThreadLocal.withInitial(() -> { + LoadingCache> cache = Caffeine + .newBuilder() + .executor(CACHE_EXECUTOR) + .scheduler(Scheduler.systemScheduler()) + .initialCapacity(256) + .maximumSize(256) + .build(this::sampleBiome); + return Pair.of(new SeededVector2Key(0, 0, 0), cache).mutable(); + }); - LoadingCache cache3D = Caffeine - .newBuilder() - .executor(CACHE_EXECUTOR) - .scheduler(Scheduler.systemScheduler()) - .initialCapacity(981504) - .maximumSize(981504) - .build(this::sampleBiome); - this.cache = ThreadLocal.withInitial(() -> Pair.of(new SeededVector3Key(0, 0, 0, 0), cache3D).mutable()); + this.cache = ThreadLocal.withInitial(() -> { + LoadingCache cache3D = Caffeine + .newBuilder() + .executor(CACHE_EXECUTOR) + .scheduler(Scheduler.systemScheduler()) + .initialCapacity(981504) + .maximumSize(981504) + .build(this::sampleBiome); + return Pair.of(new SeededVector3Key(0, 0, 0, 0), cache3D).mutable(); + });