Re: SEGV support for run-tests

From: Date: Thu, 03 Jul 2014 10:25:33 +0000
Subject: Re: SEGV support for run-tests
References: 1 2 3 4 5 6 7 8  Groups: php.internals 
Request: Send a blank email to internals+get-75212@lists.php.net to get a copy of this message
The related commit (which was extended later) was: commit 9fe5094d77356e5c2e31196b49510b6fe604ca20 Author: Moriyoshi Koizumi <moriyoshi@php.net> Date: Fri Jul 25 05:51:57 2003 +0000 Fix run-test.php so it can correctly handle skip conditions. On 3 July 2014 12:19, Michael Wallner <mike@php.net> wrote: > 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 > -- Regards, Mike

« previous php.internals (#75212) next »