function DatabaseLockBackend::lockMayBeAvailable
Checks if a lock is available for acquiring.
Parameters
string $name: Lock to acquire.
Return value
bool
Overrides LockBackendInterface::lockMayBeAvailable
1 call to DatabaseLockBackend::lockMayBeAvailable()
- DatabaseLockBackend::acquire in core/
lib/ Drupal/ Core/ Lock/ DatabaseLockBackend.php  - Acquires a lock.
 
File
- 
              core/
lib/ Drupal/ Core/ Lock/ DatabaseLockBackend.php, line 111  
Class
- DatabaseLockBackend
 - Defines the database lock backend. This is the default backend in Drupal.
 
Namespace
Drupal\Core\LockCode
public function lockMayBeAvailable($name) {
  $name = $this->normalizeName($name);
  try {
    $lock = $this->database
      ->query('SELECT [expire], [value] FROM {semaphore} WHERE [name] = :name', [
      ':name' => $name,
    ])
      ->fetchAssoc();
  } catch (\Exception $e) {
    $this->catchException($e);
    // If the table does not exist yet then the lock may be available.
    $lock = FALSE;
  }
  if (!$lock) {
    return TRUE;
  }
  $expire = (double) $lock['expire'];
  $now = microtime(TRUE);
  if ($now > $expire) {
    // We check two conditions to prevent a race condition where another
    // request acquired the lock and set a new expire time. We add a small
    // number to $expire to avoid errors with float to string conversion.
    return (bool) $this->database
      ->delete('semaphore')
      ->condition('name', $name)
      ->condition('value', $lock['value'])
      ->condition('expire', 0.0001 + $expire, '<=')
      ->execute();
  }
  return FALSE;
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.