diff --git a/build.gradle b/build.gradle index ad3d08bfb6..26107bf36c 100644 --- a/build.gradle +++ b/build.gradle @@ -42,7 +42,7 @@ allprojects { version.with { major = 2 // incompatible API changes minor = 9 // backwards-compatible additions - patch = 0 // backwards-compatible bug fixes + patch = 1 // backwards-compatible bug fixes releaseBuild = rootProject.hasProperty('release') } } diff --git a/caffeine/src/main/java/com/github/benmanes/caffeine/cache/BoundedLocalCache.java b/caffeine/src/main/java/com/github/benmanes/caffeine/cache/BoundedLocalCache.java index 9f4826bb1c..b2be147036 100644 --- a/caffeine/src/main/java/com/github/benmanes/caffeine/cache/BoundedLocalCache.java +++ b/caffeine/src/main/java/com/github/benmanes/caffeine/cache/BoundedLocalCache.java @@ -2035,6 +2035,17 @@ public Map getAllPresent(Iterable keys) { if (prior == null) { afterWrite(new AddTask(node, newWeight)); return null; + } else if (onlyIfAbsent) { + // An optimistic fast path to avoid unnecessary locking + V currentValue = prior.getValue(); + if ((currentValue != null) && !hasExpired(prior, now)) { + if (!isComputingAsync(prior)) { + tryExpireAfterRead(prior, key, currentValue, expiry(), now); + setAccessTime(prior, now); + } + afterRead(prior, now, /* recordHit */ false); + return currentValue; + } } } } else if (onlyIfAbsent) {