예제 #1
0
 /**
  * Get a ScopedLock object representing a lock on resource paths.
  * Any locks are released once this object goes out of scope.
  * The status object is updated with any errors or warnings.
  *
  * @param LockManager $manager
  * @param array $paths List of storage paths or map of lock types to path lists
  * @param int|string $type LockManager::LOCK_* constant or "mixed" and $paths
  *   can be a map of types to paths (since 1.22). Otherwise $type should be an
  *   integer and $paths should be a list of paths.
  * @param Status $status
  * @param int $timeout Timeout in seconds (0 means non-blocking) (since 1.22)
  * @return ScopedLock|null Returns null on failure
  */
 public static function factory(LockManager $manager, array $paths, $type, Status $status, $timeout = 0)
 {
     $pathsByType = is_integer($type) ? array($type => $paths) : $paths;
     $lockStatus = $manager->lockByType($pathsByType, $timeout);
     $status->merge($lockStatus);
     if ($lockStatus->isOK()) {
         return new self($manager, $pathsByType, $status);
     }
     return null;
 }