/** * Recover an abandoned lock * @param RedisClient $redis * @param mixed $key Item to lock * @param null $ttl * @return bool Was the lock acquired? */ protected function recover(RedisClient $redis, $key, $ttl = null) { if (($lockTimeout = $redis->get($key)) > time()) { return false; } $expire = $this->expire_time($ttl); $currentTimeout = $redis->getset($key, $expire); if ($currentTimeout != $lockTimeout) { return false; } return new Lock($key, $expire, $redis); }