Fixing force-flag for lock-releasing
This commit is contained in:
		
					parent
					
						
							
								9f11476ca0
							
						
					
				
			
			
				commit
				
					
						9b07132b80
					
				
			
		
					 6 changed files with 23 additions and 11 deletions
				
			
		| 
						 | 
				
			
			@ -122,12 +122,13 @@ class Lock
 | 
			
		|||
	/**
 | 
			
		||||
	 * @brief Releases a lock if it was set by us
 | 
			
		||||
	 *
 | 
			
		||||
	 * @param string $key Name of the lock
 | 
			
		||||
	 * @param string $key   Name of the lock
 | 
			
		||||
	 * @param bool   $force Force the lock to get releases
 | 
			
		||||
	 * @return void
 | 
			
		||||
	 */
 | 
			
		||||
	public static function release($key)
 | 
			
		||||
	public static function release($key, $force = false)
 | 
			
		||||
	{
 | 
			
		||||
		self::getDriver()->releaseLock($key);
 | 
			
		||||
		self::getDriver()->releaseLock($key, $force);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -61,11 +61,15 @@ class CacheLockDriver extends AbstractLockDriver
 | 
			
		|||
	/**
 | 
			
		||||
	 * (@inheritdoc)
 | 
			
		||||
	 */
 | 
			
		||||
	public function releaseLock($key)
 | 
			
		||||
	public function releaseLock($key, $force = false)
 | 
			
		||||
	{
 | 
			
		||||
		$cachekey = self::getLockKey($key);
 | 
			
		||||
 | 
			
		||||
		$this->cache->compareDelete($cachekey, getmypid());
 | 
			
		||||
		if ($force) {
 | 
			
		||||
			$this->cache->delete($key);
 | 
			
		||||
		} else {
 | 
			
		||||
			$this->cache->compareDelete($cachekey, getmypid());
 | 
			
		||||
		}
 | 
			
		||||
		$this->markRelease($key);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -68,9 +68,15 @@ class DatabaseLockDriver extends AbstractLockDriver
 | 
			
		|||
	/**
 | 
			
		||||
	 * (@inheritdoc)
 | 
			
		||||
	 */
 | 
			
		||||
	public function releaseLock($key)
 | 
			
		||||
	public function releaseLock($key, $force = false)
 | 
			
		||||
	{
 | 
			
		||||
		DBA::delete('locks', ['name' => $key, 'pid' => $this->pid]);
 | 
			
		||||
		if ($force) {
 | 
			
		||||
			$where = ['name' => $key];
 | 
			
		||||
		} else {
 | 
			
		||||
			$where = ['name' => $key, 'pid' => $this->pid];
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		DBA::delete('locks', $where);
 | 
			
		||||
 | 
			
		||||
		$this->markRelease($key);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -33,11 +33,12 @@ interface ILockDriver
 | 
			
		|||
	/**
 | 
			
		||||
	 * Releases a lock if it was set by us
 | 
			
		||||
	 *
 | 
			
		||||
	 * @param string $key The Name of the lock
 | 
			
		||||
	 * @param string $key   The Name of the lock
 | 
			
		||||
	 * @param bool   $force Force the lock to get released
 | 
			
		||||
	 *
 | 
			
		||||
	 * @return void
 | 
			
		||||
	 */
 | 
			
		||||
	public function releaseLock($key);
 | 
			
		||||
	public function releaseLock($key, $force = false);
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Releases all lock that were set by us
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -50,7 +50,7 @@ class SemaphoreLockDriver extends AbstractLockDriver
 | 
			
		|||
	/**
 | 
			
		||||
	 * (@inheritdoc)
 | 
			
		||||
	 */
 | 
			
		||||
	public function releaseLock($key)
 | 
			
		||||
	public function releaseLock($key, $force = false)
 | 
			
		||||
	{
 | 
			
		||||
		if (empty(self::$semaphore[$key])) {
 | 
			
		||||
			return false;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -60,7 +60,7 @@ class Update
 | 
			
		|||
		// In force mode, we release the dbupdate lock first
 | 
			
		||||
		// Necessary in case of an stuck update
 | 
			
		||||
		if ($force) {
 | 
			
		||||
			Lock::release('dbupdate');
 | 
			
		||||
			Lock::release('dbupdate', true);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$build = Config::get('system', 'build');
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue