Mercurial > hg > gc-bench
changeset 28:2175102c5611
MultiTokenBucket breaks on low throughput.
author | shade |
---|---|
date | Thu, 01 Dec 2016 11:12:55 +0100 |
parents | b66d7f87cd46 |
children | af1694c8b2a2 |
files | src/main/java/org/openjdk/gcbench/util/ratelimit/MultiTokenBucket.java |
diffstat | 1 files changed, 3 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/main/java/org/openjdk/gcbench/util/ratelimit/MultiTokenBucket.java Thu Dec 01 10:55:15 2016 +0100 +++ b/src/main/java/org/openjdk/gcbench/util/ratelimit/MultiTokenBucket.java Thu Dec 01 11:12:55 2016 +0100 @@ -65,7 +65,7 @@ // try to optimistically poll my own ID Counter my = states[id]; - if (my.dec() >= 1) { + if (my.val() > 0 && my.dec() >= 1) { return; // success! } @@ -157,9 +157,9 @@ public int steal() { while (true) { int val = CURRENT.get(this); - int steal = val / 2; + int steal = Math.max(1, val / 2); // try to steal at least one int remain = val - steal; - if (remain <= 0) + if (remain < 0) return 0; if (CURRENT.compareAndSet(this, val, remain)) return steal;