diff --git a/redisson/src/main/java/org/redisson/RedissonSemaphore.java b/redisson/src/main/java/org/redisson/RedissonSemaphore.java index 819b5152c..e76fe4c3c 100644 --- a/redisson/src/main/java/org/redisson/RedissonSemaphore.java +++ b/redisson/src/main/java/org/redisson/RedissonSemaphore.java @@ -491,16 +491,18 @@ public class RedissonSemaphore extends RedissonExpirable implements RSemaphore { public void reducePermits(int permits) { get(reducePermitsAsync(permits)); } - + @Override public RFuture reducePermitsAsync(int permits) { return addPermitsAsync(-permits); } - + + @Override public void addPermits(int permits) { - get(reducePermitsAsync(permits)); + get(addPermitsAsync(permits)); } + @Override public RFuture addPermitsAsync(int permits) { return commandExecutor.evalWriteAsync(getName(), LongCodec.INSTANCE, RedisCommands.EVAL_VOID, "local value = redis.call('get', KEYS[1]); " + diff --git a/redisson/src/test/java/org/redisson/RedissonSemaphoreTest.java b/redisson/src/test/java/org/redisson/RedissonSemaphoreTest.java index 1c1ade8f5..b9eeea844 100644 --- a/redisson/src/test/java/org/redisson/RedissonSemaphoreTest.java +++ b/redisson/src/test/java/org/redisson/RedissonSemaphoreTest.java @@ -34,7 +34,22 @@ public class RedissonSemaphoreTest extends BaseConcurrentTest { assertThat(s.trySetPermits(15)).isFalse(); assertThat(s.availablePermits()).isEqualTo(10); } - + + @Test + public void testAddPermits() throws InterruptedException { + RSemaphore s = redisson.getSemaphore("test"); + s.trySetPermits(10); + + s.acquire(10); + assertThat(s.availablePermits()).isEqualTo(0); + s.addPermits(4); + assertThat(s.availablePermits()).isEqualTo(4); + s.release(10); + assertThat(s.availablePermits()).isEqualTo(14); + s.acquire(5); + assertThat(s.availablePermits()).isEqualTo(9); + } + @Test public void testReducePermits() throws InterruptedException { RSemaphore s = redisson.getSemaphore("test");