Skip to content

Commit

Permalink
Fix releasing a shared lock multiple times
Browse files Browse the repository at this point in the history
Signed-off-by: Jaakko Salo <jaakkos@gmail.com>
  • Loading branch information
jvsalo authored and backportbot[bot] committed Jul 6, 2020
1 parent b6aac70 commit 392df2e
Showing 1 changed file with 5 additions and 1 deletion.
6 changes: 5 additions & 1 deletion lib/private/Lock/MemcacheLockingProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -94,8 +94,12 @@ public function acquireLock(string $path, int $type) {
*/
public function releaseLock(string $path, int $type) {
if ($type === self::LOCK_SHARED) {
$ownSharedLockCount = $this->getOwnSharedLockCount($path);
$newValue = 0;
if ($this->getOwnSharedLockCount($path) === 1) {
if ($ownSharedLockCount === 0) { // if we are not holding the lock, don't try to release it
return;
}
if ($ownSharedLockCount === 1) {
$removed = $this->memcache->cad($path, 1); // if we're the only one having a shared lock we can remove it in one go
if (!$removed) { //someone else also has a shared lock, decrease only
$newValue = $this->memcache->dec($path);
Expand Down

0 comments on commit 392df2e

Please sign in to comment.