1 lock.inc | lock_may_be_available($name) |
Check if lock acquired by a different process may be available.
If an existing lock has expired, it is removed.
Parameters
$name: The name of the lock.
Return value
TRUE if there is no lock or it was removed, FALSE otherwise.:
Related topics
File
- core/
includes/ lock.inc, line 165 - A database-mediated implementation of a locking mechanism.
Code
function lock_may_be_available($name) {
$lock = db_query('SELECT expire, value FROM {semaphore} WHERE name = :name', array(':name' => $name))->fetchAssoc();
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) db_delete('semaphore')
->condition('name', $name)
->condition('value', $lock['value'])
->condition('expire', 0.0001 + $expire, '<=')
->execute();
}
return FALSE;
}