diff --git a/common/src/main/java/me/lucko/luckperms/common/cache/MRUCache.java b/common/src/main/java/me/lucko/luckperms/common/cache/MRUCache.java index 0e4e60c96..e9cb4ce4d 100644 --- a/common/src/main/java/me/lucko/luckperms/common/cache/MRUCache.java +++ b/common/src/main/java/me/lucko/luckperms/common/cache/MRUCache.java @@ -46,13 +46,21 @@ public abstract class MRUCache { } protected void offerRecent(int validAt, T offer) { - if (validAt == this.modCount.get()) { - this.recent = offer; + synchronized (this) { + if (validAt == this.modCount.get()) { + this.recent = offer; + } } } + /** + * Calling clearRecent effectively resets the instance. any other threads going to call + * offerRecent in the future with the previous mod count will be ignored. + */ protected void clearRecent() { - this.recent = null; - this.modCount.incrementAndGet(); + synchronized (this) { + this.recent = null; + this.modCount.incrementAndGet(); + } } }