On Mon, 24 Dec 2001, Stas Bekman wrote: > On Tue, 4 Dec 2001, Doug MacEachern wrote: > > > On Wed, 5 Dec 2001, Stas Bekman wrote: > > > > > ok, but that catches only syntax errors. if we can catch the return > > > status from system() we can catch all errors, causing the failure. > > > > that would be great. > > ok, here it is. Have no clue whether you can re-use this for win32.
prev patch was partially broken. This one preserves the original value of SIGCHLD and uses SIGINT instead of 15 in kill(). Index: Apache-Test/lib/Apache/TestServer.pm =================================================================== RCS file: /home/cvs/httpd-test/perl-framework/Apache-Test/lib/Apache/TestServer.pm,v retrieving revision 1.46 diff -u -r1.46 TestServer.pm --- Apache-Test/lib/Apache/TestServer.pm 2001/12/20 17:30:54 1.46 +++ Apache-Test/lib/Apache/TestServer.pm 2001/12/23 19:42:34 @@ -402,6 +402,9 @@ } print "$cmd\n"; + my $child_pid; + my $child_in_pipe; + my $old_sig; if (Apache::TestConfig::WIN32) { #make sure only 1 process is started for win32 @@ -418,7 +421,18 @@ $config->{win32obj} = $obj; } else { - system "$cmd &"; + require POSIX; + $old_sig = $SIG{CHLD}; + $SIG{CHLD} = sub { + while ((my $child = waitpid(-1, POSIX::WNOHANG())) > 0) { + my $status = $? >> 8; + if ($status) { + $self->failed_msg("\nserver has died with status $status"); + kill POSIX::SIGINT(), $$; + } + } + }; + $child_pid = open $child_in_pipe, "|$cmd"; } while ($old_pid and $old_pid == $self->pid) { @@ -450,6 +464,10 @@ last; } } + + # now that the server has started don't abort the test run if it + # dies + $SIG{CHLD} = $old_sig || 'DEFAULT'; if (my $pid = $self->pid) { print "server $self->{name} started\n"; _____________________________________________________________________ Stas Bekman JAm_pH -- Just Another mod_perl Hacker http://stason.org/ mod_perl Guide http://perl.apache.org/guide mailto:[EMAIL PROTECTED] http://ticketmaster.com http://apacheweek.com http://singlesheaven.com http://perl.apache.org http://perlmonth.com/