public DatabaseLockBackend::lockMayBeAvailable($name)
Checks if a lock is available for acquiring.
Parameters
string $name: Lock to acquire.
Return value
bool
Overrides LockBackendInterface::lockMayBeAvailable
File
- core/lib/Drupal/Core/Lock/DatabaseLockBackend.php, line 108
Class
- DatabaseLockBackend
- Defines the database lock backend. This is the default backend in Drupal.
Namespace
Drupal\Core\Lock
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | public function lockMayBeAvailable( $name ) { try { $lock = $this ->database->query( 'SELECT expire, value FROM {semaphore} WHERE name = :name' , array ( ':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 = (float) $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; } |
Please login to continue.