locked) { $this->locked = \true; return new Success(new Lock(0, \Closure::fromCallable([$this, 'release']))); } $this->queue[] = $deferred = new Deferred(); return $deferred->promise(); } private function release() : void { if (!empty($this->queue)) { $deferred = \array_shift($this->queue); $deferred->resolve(new Lock(0, \Closure::fromCallable([$this, 'release']))); return; } $this->locked = \false; } }