Skip to content

Commit

Permalink
[Process] Fix infinite waiting for stopped process
Browse files Browse the repository at this point in the history
  • Loading branch information
mshavliuk authored and nicolas-grekas committed May 22, 2019
1 parent 9e4d5ff commit 6b9ee1e
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/Symfony/Component/Process/Process.php
Expand Up @@ -427,6 +427,7 @@ public function wait(callable $callback = null)
} while ($running);

while ($this->isRunning()) {
$this->checkTimeout();
usleep(1000);
}

Expand Down
36 changes: 36 additions & 0 deletions src/Symfony/Component/Process/Tests/ErrorProcessInitiator.php
@@ -0,0 +1,36 @@
<?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\Tests;

use Symfony\Component\Process\Exception\ProcessTimedOutException;
use Symfony\Component\Process\Process;

require \dirname(__DIR__).'/vendor/autoload.php';

list('e' => $php) = getopt('e:') + ['e' => 'php'];

try {
$process = new Process("exec $php -r \"echo 'ready'; trigger_error('error', E_USER_ERROR);\"");
$process->start();
$process->setTimeout(0.5);
while (false === strpos($process->getOutput(), 'ready')) {
usleep(1000);
}
$process->signal(SIGSTOP);
$process->wait();

return $process->getExitCode();
} catch (ProcessTimedOutException $t) {
echo $t->getMessage().PHP_EOL;

return 1;
}
9 changes: 9 additions & 0 deletions src/Symfony/Component/Process/Tests/ProcessTest.php
Expand Up @@ -1551,6 +1551,15 @@ public function testEnvArgument()
$this->assertSame($env, $p->getEnv());
}

public function testWaitStoppedDeadProcess()
{
$process = $this->getProcess(self::$phpBin.' '.__DIR__.'/ErrorProcessInitiator.php -e '.self::$phpBin);
$process->start();
$process->setTimeout(2);
$process->wait();
$this->assertFalse($process->isRunning());
}

/**
* @param string $commandline
* @param string|null $cwd
Expand Down

0 comments on commit 6b9ee1e

Please sign in to comment.