From fa01e6b4d39aa0df85b0e283b79d00b55879e3e1 Mon Sep 17 00:00:00 2001 From: Romain Neutron Date: Wed, 14 Aug 2013 17:41:18 +0200 Subject: [PATCH] [Process] Fix for #8754 (Timed-out processes are successful) --- src/Symfony/Component/Process/Process.php | 4 ++-- .../Component/Process/Tests/AbstractProcessTest.php | 1 + .../Process/Tests/SigchildDisabledProcessTest.php | 8 ++++++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Process/Process.php b/src/Symfony/Component/Process/Process.php index 3eaaf78871..5a230780fa 100644 --- a/src/Symfony/Component/Process/Process.php +++ b/src/Symfony/Component/Process/Process.php @@ -646,9 +646,9 @@ class Process $timeoutMicro = microtime(true) + $timeout; if ($this->isRunning()) { proc_terminate($this->process); - while ($this->isRunning() && microtime(true) < $timeoutMicro) { + do { usleep(1000); - } + } while ($this->isRunning() && microtime(true) < $timeoutMicro); if ($this->isRunning() && !$this->isSigchildEnabled()) { if (null !== $signal || defined('SIGKILL')) { diff --git a/src/Symfony/Component/Process/Tests/AbstractProcessTest.php b/src/Symfony/Component/Process/Tests/AbstractProcessTest.php index 3afd583086..36936a54b5 100644 --- a/src/Symfony/Component/Process/Tests/AbstractProcessTest.php +++ b/src/Symfony/Component/Process/Tests/AbstractProcessTest.php @@ -444,6 +444,7 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase $duration = microtime(true) - $start; $this->assertLessThan($timeout + $precision, $duration); + $this->assertFalse($process->isSuccessful()); } public function testGetPid() diff --git a/src/Symfony/Component/Process/Tests/SigchildDisabledProcessTest.php b/src/Symfony/Component/Process/Tests/SigchildDisabledProcessTest.php index 8779263736..32b8270d04 100644 --- a/src/Symfony/Component/Process/Tests/SigchildDisabledProcessTest.php +++ b/src/Symfony/Component/Process/Tests/SigchildDisabledProcessTest.php @@ -61,6 +61,14 @@ class SigchildDisabledProcessTest extends AbstractProcessTest parent::testProcessWithoutTermSignal(); } + /** + * @expectedException \Symfony\Component\Process\Exception\RuntimeException + */ + public function testCheckTimeoutOnStartedProcess() + { + parent::testCheckTimeoutOnStartedProcess(); + } + /** * @expectedException \Symfony\Component\Process\Exception\RuntimeException */