From 3be4b08bb01c5c6c00e9a0ca99b77c85ab9012ec Mon Sep 17 00:00:00 2001 From: Daniel Mills Date: Wed, 7 Jul 2021 19:22:36 -0400 Subject: [PATCH] Test paper deadlock fix --- .../scaffold/stream/utility/CachedStream2D.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/volmit/iris/scaffold/stream/utility/CachedStream2D.java b/src/main/java/com/volmit/iris/scaffold/stream/utility/CachedStream2D.java index 1e431e9b5..7de579513 100644 --- a/src/main/java/com/volmit/iris/scaffold/stream/utility/CachedStream2D.java +++ b/src/main/java/com/volmit/iris/scaffold/stream/utility/CachedStream2D.java @@ -4,18 +4,21 @@ import com.googlecode.concurrentlinkedhashmap.ConcurrentLinkedHashMap; import com.volmit.iris.scaffold.cache.Cache; import com.volmit.iris.scaffold.stream.BasicStream; import com.volmit.iris.scaffold.stream.ProceduralStream; -import com.volmit.iris.util.ChronoLatch; +import java.util.concurrent.Semaphore; + +// TODO BETTER CACHE SOLUTION public class CachedStream2D extends BasicStream implements ProceduralStream { private final ProceduralStream stream; private final ConcurrentLinkedHashMap cache; - private ChronoLatch cl = new ChronoLatch(1000); + private final Semaphore locker; public CachedStream2D(ProceduralStream stream, int size) { super(); this.stream = stream; + locker = new Semaphore(30); cache = new ConcurrentLinkedHashMap.Builder() .initialCapacity(size) .maximumWeightedCapacity(size) @@ -38,8 +41,15 @@ public class CachedStream2D extends BasicStream implements ProceduralStrea @Override public T get(double x, double z) { + try { + locker.acquire(); + } catch (InterruptedException e) { + e.printStackTrace(); + } long ck = Cache.key((int) x, (int) z); - return cache.compute(ck, (k, v) -> v != null ? v : stream.get(Cache.keyX(ck), Cache.keyZ(ck))); + T f = cache.compute(ck, (k, v) -> v != null ? v : stream.get(Cache.keyX(ck), Cache.keyZ(ck))); + locker.release(); + return f; } @Override