summaryrefslogtreecommitdiffstats
path: root/tests/lib
diff options
context:
space:
mode:
authorRobin Appelman <robin@icewind.nl>2018-07-05 14:39:10 +0200
committerRobin Appelman <robin@icewind.nl>2018-07-10 17:50:45 +0200
commit1fa611577973efe69a319d8d14a32b09f50dc4ec (patch)
tree1b04cbd75d1e97e169966e4edbec7f7cca5800b7 /tests/lib
parent486dff093453b402324b25a63554fcb10fb18e41 (diff)
downloadnextcloud-server-1fa611577973efe69a319d8d14a32b09f50dc4ec.tar.gz
nextcloud-server-1fa611577973efe69a319d8d14a32b09f50dc4ec.zip
prevent lock values from going negative with memcache backend
This can be caused by the code releasing more locks then it acquires, once the lock value becomes negative it's likely that it will never be able to change into an exclusive lock again. Signed-off-by: Robin Appelman <robin@icewind.nl>
Diffstat (limited to 'tests/lib')
-rw-r--r--tests/lib/Lock/LockingProvider.php12
1 files changed, 12 insertions, 0 deletions
diff --git a/tests/lib/Lock/LockingProvider.php b/tests/lib/Lock/LockingProvider.php
index 49742baa561..9c0461e2e60 100644
--- a/tests/lib/Lock/LockingProvider.php
+++ b/tests/lib/Lock/LockingProvider.php
@@ -243,4 +243,16 @@ abstract class LockingProvider extends TestCase {
$this->instance->acquireLock('foo', ILockingProvider::LOCK_SHARED);
$this->instance->changeLock('foo', ILockingProvider::LOCK_SHARED);
}
+
+ public function testReleaseNonExistingShared() {
+ $this->instance->acquireLock('foo', ILockingProvider::LOCK_SHARED);
+ $this->instance->releaseLock('foo', ILockingProvider::LOCK_SHARED);
+
+ // releasing a lock once to many should not result in a locked state
+ $this->instance->releaseLock('foo', ILockingProvider::LOCK_SHARED);
+
+ $this->instance->acquireLock('foo', ILockingProvider::LOCK_EXCLUSIVE);
+ $this->assertTrue($this->instance->isLocked('foo', ILockingProvider::LOCK_EXCLUSIVE));
+ $this->instance->releaseLock('foo', ILockingProvider::LOCK_EXCLUSIVE);
+ }
}