diff --git a/lib/Service/LockService.php b/lib/Service/LockService.php index 74d25665..1858c8ca 100644 --- a/lib/Service/LockService.php +++ b/lib/Service/LockService.php @@ -162,6 +162,7 @@ public function lock(LockContext $lockScope): FileLock { ); $this->logger->notice('extending existing lock', ['fileLock' => $known]); $this->locksRequest->update($known); + $this->lockCache[$lockScope->getNode()->getId()] = $known; $this->injectMetadata($known); return $known; } @@ -204,6 +205,7 @@ public function unlock(LockContext $lock, bool $force = false): FileLock { } $this->locksRequest->delete($known); + $this->lockCache[$lock->getNode()->getId()] = false; $this->propagateEtag($lock); $this->injectMetadata($known); return $known; diff --git a/tests/Feature/LockFeatureTest.php b/tests/Feature/LockFeatureTest.php index b8410cec..0ce84474 100644 --- a/tests/Feature/LockFeatureTest.php +++ b/tests/Feature/LockFeatureTest.php @@ -60,10 +60,16 @@ public function setUp(): void { } return time(); }); + + // switch to user2 to clear stale cache + $this->loginAndGetUserFolder(self::TEST_USER2); + $folder = $this->loginAndGetUserFolder(self::TEST_USER1); $folder->delete('test-file'); $folder->delete('test-file2'); $folder->delete('test-file3'); + $folder->delete('etag_test'); + \OC_Hook::$thrownExceptions = []; $this->overwriteService(ITimeFactory::class, $this->timeFactory); $this->toTheFuture(0);