Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorRobin Appelman <robin@icewind.nl>2018-07-05 15:39:10 +0300
committerRobin Appelman <robin@icewind.nl>2018-07-10 18:50:45 +0300
commit1fa611577973efe69a319d8d14a32b09f50dc4ec (patch)
tree1b04cbd75d1e97e169966e4edbec7f7cca5800b7 /tests
parent486dff093453b402324b25a63554fcb10fb18e41 (diff)
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')
-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);
+ }
}