Re: SEGV support for run-tests

From: Date: Thu, 03 Jul 2014 10:19:00 +0000
Subject: Re: SEGV support for run-tests
References: 1 2 3 4 5 6 7  Groups: php.internals 
Request: Send a blank email to internals+get-75210@lists.php.net to get a copy of this message
Now I see; run-tests does several "unset foo;" before the actual command, we end up with the signo(+128) as exitcode of the shell. On 3 July 2014 12:05, Michael Wallner <mike@php.net> wrote: > 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 > -- Regards, Mike

« previous php.internals (#75210) next »