Using instance instead of class
This commit is contained in:
		
							parent
							
								
									4dfd90646c
								
							
						
					
					
						commit
						411dc2aefc
					
				@ -102,11 +102,7 @@ class Asynchronous
 | 
				
			|||||||
	 */
 | 
						 */
 | 
				
			||||||
	public static function awaitChildren()
 | 
						public static function awaitChildren()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		$instance = self::getInstance();
 | 
							self::getInstance()->_awaitChildren();
 | 
				
			||||||
		while (count($instance->children) > 0) {
 | 
					 | 
				
			||||||
			pcntl_wait($status);
 | 
					 | 
				
			||||||
			array_shift($instance->children);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
@ -114,15 +110,7 @@ class Asynchronous
 | 
				
			|||||||
	 */
 | 
						 */
 | 
				
			||||||
	public static function killChildren()
 | 
						public static function killChildren()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		$instance = self::getInstance();
 | 
							self::getInstance()->_killChildren();
 | 
				
			||||||
 | 
					 | 
				
			||||||
		/*
 | 
					 | 
				
			||||||
		 * Require the children to terminate
 | 
					 | 
				
			||||||
		 */
 | 
					 | 
				
			||||||
		foreach ($instance->children as $index => $pid)
 | 
					 | 
				
			||||||
			if (!posix_kill($pid, SIGKILL))
 | 
					 | 
				
			||||||
				posix_kill($pid, SIGTERM);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
@ -130,11 +118,7 @@ class Asynchronous
 | 
				
			|||||||
	 */
 | 
						 */
 | 
				
			||||||
	public static function removeShmBlock()
 | 
						public static function removeShmBlock()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		$instance = self::getInstance();
 | 
							self::getInstance()->_removeShmBlock();
 | 
				
			||||||
		if (is_resource($instance->shm)) {
 | 
					 | 
				
			||||||
			shm_remove($instance->shm);
 | 
					 | 
				
			||||||
			shm_detach($instance->shm);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
@ -165,6 +149,52 @@ class Asynchronous
 | 
				
			|||||||
		$this->attachShm();
 | 
							$this->attachShm();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * @return $this
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						private function _awaitChildren()
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							/*
 | 
				
			||||||
 | 
							 * Wait for the children to terminate
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
 | 
							while (count($this->children) > 0) {
 | 
				
			||||||
 | 
								pcntl_wait($status);
 | 
				
			||||||
 | 
								array_shift($this->children);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							return $this;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * @return $this
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						private function _killChildren()
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							/*
 | 
				
			||||||
 | 
							 * Require the children to terminate
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
 | 
							foreach ($this->children as $index => $pid)
 | 
				
			||||||
 | 
								if (!posix_kill($pid, SIGKILL))
 | 
				
			||||||
 | 
									posix_kill($pid, SIGTERM);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							return $this;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * @return $this
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						private function _removeShmBlock()
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							/*
 | 
				
			||||||
 | 
							 * Detach from the shared memory block
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
 | 
							if (is_resource($this->shm)) {
 | 
				
			||||||
 | 
								shm_remove($this->shm);
 | 
				
			||||||
 | 
								shm_detach($this->shm);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							return $this;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * @return $this
 | 
						 * @return $this
 | 
				
			||||||
@ -231,23 +261,21 @@ class Asynchronous
 | 
				
			|||||||
			if ($instance->isChild)
 | 
								if ($instance->isChild)
 | 
				
			||||||
				return;
 | 
									return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			self::awaitChildren();
 | 
								$instance->_awaitChildren();
 | 
				
			||||||
			self::removeShmBlock();
 | 
								$instance->_removeShmBlock();
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/*
 | 
							/*
 | 
				
			||||||
		 * The signal handler
 | 
							 * The signal handler
 | 
				
			||||||
		 */
 | 
							 */
 | 
				
			||||||
		foreach([SIGHUP, SIGINT, SIGQUIT, SIGKILL, SIGTERM] as $signal)
 | 
							foreach ([SIGINT, SIGKILL, SIGTERM] as $signal)
 | 
				
			||||||
			pcntl_signal($signal, function($s) use (&$instance) {
 | 
								pcntl_signal($signal, function ($signal) use (&$instance) {
 | 
				
			||||||
				if ($instance->isChild)
 | 
									if ($instance->isChild)
 | 
				
			||||||
					return;
 | 
										return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				self::killChildren();
 | 
									$instance->_killChildren();
 | 
				
			||||||
				self::awaitChildren();
 | 
									$instance->_removeShmBlock();
 | 
				
			||||||
				self::removeShmBlock();
 | 
					 | 
				
			||||||
			});
 | 
								});
 | 
				
			||||||
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user