aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main
diff options
context:
space:
mode:
authorGravatar nharmata <nharmata@google.com>2018-08-08 07:51:53 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-08-08 07:53:31 -0700
commitba37ffed620a5711794566a5b0e497d1f8c4099b (patch)
treefe759b3701e22f6df2230082e220b00a8fe6d1ce /src/main
parent39e9b450a05f19e698fede059dccae29e962b97e (diff)
Improve NaiveMultisetSemaphore#estimateCurrentNumUniqueValues by having it use Semaphore#availablePermits. I have no idea why I didn't do this initially.
RELNOTES: None PiperOrigin-RevId: 207883650
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/com/google/devtools/build/lib/concurrent/MultisetSemaphore.java11
1 files changed, 4 insertions, 7 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/concurrent/MultisetSemaphore.java b/src/main/java/com/google/devtools/build/lib/concurrent/MultisetSemaphore.java
index 5996408d54..8a0bb93bde 100644
--- a/src/main/java/com/google/devtools/build/lib/concurrent/MultisetSemaphore.java
+++ b/src/main/java/com/google/devtools/build/lib/concurrent/MultisetSemaphore.java
@@ -133,14 +133,15 @@ public abstract class MultisetSemaphore<T> {
}
private static class NaiveMultisetSemaphore<T> extends MultisetSemaphore<T> {
+ private final int maxNumUniqueValues;
private final Semaphore semaphore;
private final Object lock = new Object();
// Protected by 'lock'.
- private final HashMultiset<T> actualValues;
+ private final HashMultiset<T> actualValues = HashMultiset.create();
private NaiveMultisetSemaphore(int maxNumUniqueValues) {
+ this.maxNumUniqueValues = maxNumUniqueValues;
this.semaphore = new Semaphore(maxNumUniqueValues);
- actualValues = HashMultiset.create();
}
@Override
@@ -173,11 +174,7 @@ public abstract class MultisetSemaphore<T> {
@Override
public int estimateCurrentNumUniqueValues() {
- // Notes:
- // (1) The race here is completely benign; we're just supposed to return an estimate.
- // (2) See the javadoc for Multiset#size, which explains to use entrySet().size() to get the
- // number of unique values.
- return actualValues.entrySet().size();
+ return maxNumUniqueValues - semaphore.availablePermits();
}
}
}