lib/private/Lock/DBLockingProvider.php
/**
	 * release all lock acquired by this instance which were marked using the mark* methods
	 */
release all lock acquired by this instance which were marked using the mark* methods
release all lock acquired by this instance which were marked using the mark * methods
public function releaseAll() {
		parent::releaseAll();
		$lockedPaths = array_keys($this->sharedLocks);
		$lockedPaths = array_filter($lockedPaths, function ($path) {
			return $this->sharedLocks[$path];
		});
		$chunkedPaths = array_chunk($lockedPaths, 100);
		foreach ($chunkedPaths as $chunk) {
			$builder = $this->connection->getQueryBuilder();
			$query = $builder->update('file_locks')
				->set('lock', $builder->createFunction('`lock` -1'))
				->where($builder->expr()->in('key', $builder->createNamedParameter($chunk, IQueryBuilder::PARAM_STR_ARRAY)))
				->andWhere($builder->expr()->gt('lock', new Literal(0)));
			$query->execute();
		}
	}
public function releaseAll ( ) { parent :: releaseAll ( ) ; $ lockedPaths = array_keys ( $ this -> sharedLocks ) ; $ lockedPaths = array_filter ( $ lockedPaths , function ( $ path ) { return $ this -> sharedLocks [ $ path ] ; } ) ; $ chunkedPaths = array_chunk ( $ lockedPaths , 100 ) ; foreach ( $ chunkedPaths as $ chunk ) { $ builder = $ this -> connection -> getQueryBuilder ( ) ; $ query = $ builder -> update ( 'file_locks' ) -> set ( 'lock' , $ builder -> createFunction ( '`lock` -1' ) ) -> where ( $ builder -> expr ( ) -> in ( 'key' , $ builder -> createNamedParameter ( $ chunk , IQueryBuilder :: PARAM_STR_ARRAY ) ) ) -> andWhere ( $ builder -> expr ( ) -> gt ( 'lock' , new Literal ( 0 ) ) ) ; $ query -> execute ( ) ; } }
release all lock acquired by this instance which were marked using the mark* methods
release all lock acquired by this instance which were marked using the mark * methods
// since we keep shared locks we need to manually clean those