Merge "Replace Semaphore with AtomicInteger"
diff --git a/src/main/java/com/googlesource/gerrit/plugins/quota/TaskQuotaWithPermits.java b/src/main/java/com/googlesource/gerrit/plugins/quota/TaskQuotaWithPermits.java
index 027ddcf..ea414ca 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/quota/TaskQuotaWithPermits.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/quota/TaskQuotaWithPermits.java
@@ -1,20 +1,25 @@
package com.googlesource.gerrit.plugins.quota;
import com.google.gerrit.server.git.WorkQueue;
-import java.util.concurrent.Semaphore;
+import java.util.concurrent.atomic.AtomicInteger;
public abstract class TaskQuotaWithPermits implements TaskQuota {
- protected final Semaphore permits;
+ protected final AtomicInteger permits;
public TaskQuotaWithPermits(int maxPermits) {
- this.permits = new Semaphore(maxPermits);
+ this.permits = new AtomicInteger(maxPermits);
}
public boolean isReadyToStart(WorkQueue.Task<?> task) {
- return permits.tryAcquire();
+ if (permits.decrementAndGet() >= 0) {
+ return true;
+ }
+
+ permits.incrementAndGet();
+ return false;
}
public void onStop(WorkQueue.Task<?> task) {
- permits.release();
+ permits.incrementAndGet();
}
}