function lock_may_be_available in Drupal 6
Same name in this branch
- 6 includes/lock.inc \lock_may_be_available()
- 6 includes/lock-install.inc \lock_may_be_available()
Same name and namespace in other branches
- 7 includes/lock.inc \lock_may_be_available()
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
2 calls to lock_may_be_available()
- lock_acquire in includes/
lock.inc - Acquire (or renew) a lock, but do not block if it fails.
- lock_wait in includes/
lock.inc - Wait for a lock to be available.
File
- includes/
lock.inc, line 148 - A database-mediated implementation of a locking mechanism.
Code
function lock_may_be_available($name) {
$lock = db_fetch_array(db_query("SELECT expire, value FROM {semaphore} WHERE name = '%s'", $name));
if (!$lock) {
return TRUE;
}
$expire = (double) $lock['expire'];
list($usec, $sec) = explode(' ', microtime());
$now = (double) $usec + (double) $sec;
if ($now > $lock['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.
db_query("DELETE FROM {semaphore} WHERE name = '%s' AND value = '%s' AND expire <= %f", $name, $lock['value'], 0.0001 + $expire);
return (bool) db_affected_rows();
}
return FALSE;
}