diff --git a/redisson/src/main/java/org/redisson/RedissonPermitExpirableSemaphore.java b/redisson/src/main/java/org/redisson/RedissonPermitExpirableSemaphore.java index 92434bc1c..5038c16cd 100644 --- a/redisson/src/main/java/org/redisson/RedissonPermitExpirableSemaphore.java +++ b/redisson/src/main/java/org/redisson/RedissonPermitExpirableSemaphore.java @@ -672,7 +672,8 @@ public class RedissonPermitExpirableSemaphore extends RedissonExpirable implemen "end;" + "return value; " + "end; " + - "return redis.call('get', KEYS[1]); ", + "local ret = redis.call('get', KEYS[1]); " + + "return ret == false and 0 or ret;", Arrays.asList(getName(), timeoutName, getChannelName()), System.currentTimeMillis()); } diff --git a/redisson/src/test/java/org/redisson/RedissonPermitExpirableSemaphoreTest.java b/redisson/src/test/java/org/redisson/RedissonPermitExpirableSemaphoreTest.java index 43a7db04a..870e3a75d 100644 --- a/redisson/src/test/java/org/redisson/RedissonPermitExpirableSemaphoreTest.java +++ b/redisson/src/test/java/org/redisson/RedissonPermitExpirableSemaphoreTest.java @@ -13,6 +13,12 @@ import org.redisson.client.RedisException; public class RedissonPermitExpirableSemaphoreTest extends BaseConcurrentTest { + @Test + public void testNotExistent() { + RPermitExpirableSemaphore semaphore = redisson.getPermitExpirableSemaphore("testSemaphoreForNPE"); + Assert.assertEquals(0, semaphore.availablePermits()); + } + @Test public void testAvailablePermits() throws InterruptedException { RPermitExpirableSemaphore semaphore = redisson.getPermitExpirableSemaphore("test-semaphore");