diff options
Diffstat (limited to 'lib/private/Lock/AbstractLockingProvider.php')
-rw-r--r-- | lib/private/Lock/AbstractLockingProvider.php | 81 |
1 files changed, 23 insertions, 58 deletions
diff --git a/lib/private/Lock/AbstractLockingProvider.php b/lib/private/Lock/AbstractLockingProvider.php index f4899bbb2b2..d7e5976079c 100644 --- a/lib/private/Lock/AbstractLockingProvider.php +++ b/lib/private/Lock/AbstractLockingProvider.php @@ -1,28 +1,10 @@ <?php declare(strict_types=1); - /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Robin Appelman <robin@icewind.nl> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ namespace OC\Lock; @@ -30,24 +12,24 @@ use OCP\Lock\ILockingProvider; /** * Base locking provider that keeps track of locks acquired during the current request - * to release any left over locks at the end of the request + * to release any leftover locks at the end of the request */ abstract class AbstractLockingProvider implements ILockingProvider { - /** @var int $ttl */ - protected $ttl; // how long until we clear stray locks in seconds - - protected $acquiredLocks = [ + protected array $acquiredLocks = [ 'shared' => [], 'exclusive' => [] ]; /** - * Check if we've locally acquired a lock * - * @param string $path - * @param int $type - * @return bool + * @param int $ttl how long until we clear stray locks in seconds */ + public function __construct( + protected int $ttl, + ) { + } + + /** @inheritDoc */ protected function hasAcquiredLock(string $path, int $type): bool { if ($type === self::LOCK_SHARED) { return isset($this->acquiredLocks['shared'][$path]) && $this->acquiredLocks['shared'][$path] > 0; @@ -56,14 +38,9 @@ abstract class AbstractLockingProvider implements ILockingProvider { } } - /** - * Mark a locally acquired lock - * - * @param string $path - * @param int $type self::LOCK_SHARED or self::LOCK_EXCLUSIVE - */ - protected function markAcquire(string $path, int $type) { - if ($type === self::LOCK_SHARED) { + /** @inheritDoc */ + protected function markAcquire(string $path, int $targetType): void { + if ($targetType === self::LOCK_SHARED) { if (!isset($this->acquiredLocks['shared'][$path])) { $this->acquiredLocks['shared'][$path] = 0; } @@ -73,13 +50,8 @@ abstract class AbstractLockingProvider implements ILockingProvider { } } - /** - * Mark a release of a locally acquired lock - * - * @param string $path - * @param int $type self::LOCK_SHARED or self::LOCK_EXCLUSIVE - */ - protected function markRelease(string $path, int $type) { + /** @inheritDoc */ + protected function markRelease(string $path, int $type): void { if ($type === self::LOCK_SHARED) { if (isset($this->acquiredLocks['shared'][$path]) and $this->acquiredLocks['shared'][$path] > 0) { $this->acquiredLocks['shared'][$path]--; @@ -92,13 +64,8 @@ abstract class AbstractLockingProvider implements ILockingProvider { } } - /** - * Change the type of an existing tracked lock - * - * @param string $path - * @param int $targetType self::LOCK_SHARED or self::LOCK_EXCLUSIVE - */ - protected function markChange(string $path, int $targetType) { + /** @inheritDoc */ + protected function markChange(string $path, int $targetType): void { if ($targetType === self::LOCK_SHARED) { unset($this->acquiredLocks['exclusive'][$path]); if (!isset($this->acquiredLocks['shared'][$path])) { @@ -111,10 +78,8 @@ abstract class AbstractLockingProvider implements ILockingProvider { } } - /** - * release all lock acquired by this instance which were marked using the mark* methods - */ - public function releaseAll() { + /** @inheritDoc */ + public function releaseAll(): void { foreach ($this->acquiredLocks['shared'] as $path => $count) { for ($i = 0; $i < $count; $i++) { $this->releaseLock($path, self::LOCK_SHARED); @@ -126,7 +91,7 @@ abstract class AbstractLockingProvider implements ILockingProvider { } } - protected function getOwnSharedLockCount(string $path) { - return isset($this->acquiredLocks['shared'][$path]) ? $this->acquiredLocks['shared'][$path] : 0; + protected function getOwnSharedLockCount(string $path): int { + return $this->acquiredLocks['shared'][$path] ?? 0; } } |