1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- <?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\Process\Pipes;
- /**
- * @author Romain Neutron <imprec@gmail.com>
- *
- * @internal
- */
- abstract class AbstractPipes implements PipesInterface
- {
- /** @var array */
- public $pipes = array();
- /** @var string */
- protected $inputBuffer = '';
- /** @var resource|null */
- protected $input;
- /** @var bool */
- private $blocked = true;
- /**
- * {@inheritdoc}
- */
- public function close()
- {
- foreach ($this->pipes as $pipe) {
- fclose($pipe);
- }
- $this->pipes = array();
- }
- /**
- * Returns true if a system call has been interrupted.
- *
- * @return bool
- */
- protected function hasSystemCallBeenInterrupted()
- {
- $lastError = error_get_last();
- // stream_select returns false when the `select` system call is interrupted by an incoming signal
- return isset($lastError['message']) && false !== stripos($lastError['message'], 'interrupted system call');
- }
- /**
- * Unblocks streams
- */
- protected function unblock()
- {
- if (!$this->blocked) {
- return;
- }
- foreach ($this->pipes as $pipe) {
- stream_set_blocking($pipe, 0);
- }
- if (null !== $this->input) {
- stream_set_blocking($this->input, 0);
- }
- $this->blocked = false;
- }
- }
|