123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- <?php
- namespace Illuminate\Cache;
- use Illuminate\Support\Carbon;
- class ArrayLock extends Lock
- {
- /**
- * The parent array cache store.
- *
- * @var \Illuminate\Cache\ArrayStore
- */
- protected $store;
- /**
- * Create a new lock instance.
- *
- * @param \Illuminate\Cache\ArrayStore $store
- * @param string $name
- * @param int $seconds
- * @param string|null $owner
- * @return void
- */
- public function __construct($store, $name, $seconds, $owner = null)
- {
- parent::__construct($name, $seconds, $owner);
- $this->store = $store;
- }
- /**
- * Attempt to acquire the lock.
- *
- * @return bool
- */
- public function acquire()
- {
- $expiration = $this->store->locks[$this->name]['expiresAt'] ?? Carbon::now()->addSecond();
- if ($this->exists() && $expiration->isFuture()) {
- return false;
- }
- $this->store->locks[$this->name] = [
- 'owner' => $this->owner,
- 'expiresAt' => $this->seconds === 0 ? null : Carbon::now()->addSeconds($this->seconds),
- ];
- return true;
- }
- /**
- * Determine if the current lock exists.
- *
- * @return bool
- */
- protected function exists()
- {
- return isset($this->store->locks[$this->name]);
- }
- /**
- * Release the lock.
- *
- * @return bool
- */
- public function release()
- {
- if (! $this->exists()) {
- return false;
- }
- if (! $this->isOwnedByCurrentProcess()) {
- return false;
- }
- $this->forceRelease();
- return true;
- }
- /**
- * Returns the owner value written into the driver for this lock.
- *
- * @return string
- */
- protected function getCurrentOwner()
- {
- if (! $this->exists()) {
- return null;
- }
- return $this->store->locks[$this->name]['owner'];
- }
- /**
- * Releases this lock in disregard of ownership.
- *
- * @return void
- */
- public function forceRelease()
- {
- unset($this->store->locks[$this->name]);
- }
- }
|