0) { // This function should only be called by a request that failed to get a // lock, so we sleep first to give the parallel request a chance to finish // and release the lock. usleep($sleep); // After each sleep, increase the value of $sleep until it reaches // 500ms, to reduce the potential for a lock stampede. $delay = $delay - $sleep; $sleep = min(500000, $sleep + 25000, $delay); if ($this->lockMayBeAvailable($name)) { // No longer need to wait. return FALSE; } } // The caller must still wait longer to get the lock. return TRUE; } /** * Default implementation from actual Drupal core. * * @see Redis_Lock_BackendInterface::getLockId() */ public function getLockId() { if (!isset($this->_lockId)) { $this->_lockId = uniqid(mt_rand(), TRUE); // We only register a shutdown function if a lock is used. drupal_register_shutdown_function('lock_release_all', $this->_lockId); } return $this->_lockId; } /** * Generate a redis key name for the current lock name */ public function getKey($name = null) { if (null === $name) { return parent::getKey('lock'); } else { return parent::getKey(array('lock', $name)); } } }