Re: SEGV support for run-tests
| From: | Michael Wallner | Date: | Thu, 03 Jul 2014 10:05:03 +0000 |
| Subject: | Re: SEGV support for run-tests | ||
| References: | 1 2 3 4 5 6 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-75207@lists.php.net to get a copy of this message | ||
Your case is actually already be handled by run-tests:
Termsig=11 sould be appended to the test's output.
if ($stat['signaled']) {
$data .= "\nTermsig=" . $stat['stopsig'];
}
On 3 July 2014 11:57, Michael Wallner <mike@php.net> wrote:
> Seems about true. I wonder why that's not the case in the run-tests
> environment...
>
>
> On 3 July 2014 11:40, Ferenc Kovacs <tyrael@php.net> wrote:
>
>>
>>
>>
>> On Thu, Jul 3, 2014 at 11:23 AM, Michael Wallner <mike@php.net> wrote:
>>
>>> On 3 July 2014 11:18, Ferenc Kovacs <tyrael@php.net> wrote:
>>>
>>>> hi,
>>>>
>>>> I think the patch is wrong.
>>>> from my experience, when a proc_opened process is killed via a signal
>>>> (before you had a chance to proc_close() it) then the exitcode reported by
>>>> proc_close() and proc_get_status() will be -1, but
>>>> proc_get_status()["signaled"] will be true and
>>>> proc_get_status()["termsig"]
>>>> will have the signalcode of the signal which terminated the process(11 for
>>>> sigsegv).
>>>>
>>>
>>> This worked:
>>>
>>> --TEST--
>>> segfault
>>> --SKIPIF--
>>> <?php extension_loaded("posix") or die("skip need posix\n");
>>> --FILE--
>>> <?php
>>> echo "before\n";
>>> posix_kill(posix_getpid(),11);
>>> echo "after\n";
>>> ?>
>>> ===DONE===
>>> --EXPECTF--
>>> before
>>>
>>>
>>> --
>>> Regards,
>>> Mike
>>>
>>
>> [tyrael@Ferencs-MacBook-Pro-135 php-src.git (PHP-5.4 ✗)]$ cat test.php
>> <?php
>> $descriptorspec = array(
>> 0 => array("pipe", "r"), // stdin is a pipe that the child will
>> read
>> from
>> 1 => array("pipe", "w"), // stdout is a pipe that the child will
>> write to
>> 2 => array("file", "/tmp/error-output.txt", "a") //
>> stderr is a file
>> to write to
>> );
>>
>> $cwd = '/tmp';
>> $env = array();
>>
>> $process = proc_open(PHP_BINARY.' '.__DIR__.'/test2.php',
>> $descriptorspec, $pipes, $cwd, $env);
>> sleep(1);
>> $status = proc_get_status($process);
>> $exitCode = proc_close($process);
>> var_dump($exitCode);
>> var_dump($status);
>> [tyrael@Ferencs-MacBook-Pro-135 php-src.git (PHP-5.4 ✗)]$ cat test2.php
>> <?php
>> echo "before\n";
>> posix_kill(posix_getpid(),11);
>> echo "after\n";
>> ?>
>> [tyrael@Ferencs-MacBook-Pro-135 php-src.git (PHP-5.4 ✗)]$ ./sapi/cli/php
>> test.php
>> int(-1)
>> array(8) {
>> ["command"]=>
>> string(94) "/Users/tyrael/checkouts/php-src.git/sapi/cli/php
>> /Users/tyrael/checkouts/php-src.git/test2.php"
>> ["pid"]=>
>> int(9158)
>> ["running"]=>
>> bool(false)
>> ["signaled"]=>
>> bool(true)
>> ["stopped"]=>
>> bool(false)
>> ["exitcode"]=>
>> int(-1)
>> ["termsig"]=>
>> int(11)
>> ["stopsig"]=>
>> int(0)
>> }
>>
>
>
>
> --
> Regards,
> Mike
>
--
Regards,
Mike