radarrplexorganizrnginxsonarrdashboardembycouchpotatonzbgetbookmarkapplication-dashboardmuximuxlandingpagestartpagelandinghtpcserverhomepagesabnzbdheimdall
		
		
		
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							72 lines
						
					
					
						
							1.7 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							72 lines
						
					
					
						
							1.7 KiB
						
					
					
				
								<?php
							 | 
						|
								
							 | 
						|
								/*
							 | 
						|
								 * This file is part of the Symfony package.
							 | 
						|
								 *
							 | 
						|
								 * (c) Fabien Potencier <fabien@symfony.com>
							 | 
						|
								 *
							 | 
						|
								 * For the full copyright and license information, please view the LICENSE
							 | 
						|
								 * file that was distributed with this source code.
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								namespace Symfony\Component\Console\Command;
							 | 
						|
								
							 | 
						|
								use Symfony\Component\Console\Exception\LogicException;
							 | 
						|
								use Symfony\Component\Console\Exception\RuntimeException;
							 | 
						|
								use Symfony\Component\Lock\Factory;
							 | 
						|
								use Symfony\Component\Lock\Lock;
							 | 
						|
								use Symfony\Component\Lock\Store\FlockStore;
							 | 
						|
								use Symfony\Component\Lock\Store\SemaphoreStore;
							 | 
						|
								
							 | 
						|
								/**
							 | 
						|
								 * Basic lock feature for commands.
							 | 
						|
								 *
							 | 
						|
								 * @author Geoffrey Brier <geoffrey.brier@gmail.com>
							 | 
						|
								 */
							 | 
						|
								trait LockableTrait
							 | 
						|
								{
							 | 
						|
								    /** @var Lock */
							 | 
						|
								    private $lock;
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Locks a command.
							 | 
						|
								     *
							 | 
						|
								     * @return bool
							 | 
						|
								     */
							 | 
						|
								    private function lock($name = null, $blocking = false)
							 | 
						|
								    {
							 | 
						|
								        if (!class_exists(SemaphoreStore::class)) {
							 | 
						|
								            throw new RuntimeException('To enable the locking feature you must install the symfony/lock component.');
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        if (null !== $this->lock) {
							 | 
						|
								            throw new LogicException('A lock is already in place.');
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        if (SemaphoreStore::isSupported($blocking)) {
							 | 
						|
								            $store = new SemaphoreStore();
							 | 
						|
								        } else {
							 | 
						|
								            $store = new FlockStore();
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        $this->lock = (new Factory($store))->createLock($name ?: $this->getName());
							 | 
						|
								        if (!$this->lock->acquire($blocking)) {
							 | 
						|
								            $this->lock = null;
							 | 
						|
								
							 | 
						|
								            return false;
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        return true;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Releases the command lock if there is one.
							 | 
						|
								     */
							 | 
						|
								    private function release()
							 | 
						|
								    {
							 | 
						|
								        if ($this->lock) {
							 | 
						|
								            $this->lock->release();
							 | 
						|
								            $this->lock = null;
							 | 
						|
								        }
							 | 
						|
								    }
							 | 
						|
								}
							 | 
						|
								
							 |