use Getopt::Long qw(:config gnu_getopt no_ignore_case auto_abbrev);
use Errno qw(EINTR);
use Fcntl qw(:seek);
-use POSIX qw(_POSIX_PIPE_BUF WNOHANG);
+use POSIX qw(WNOHANG);
use File::Temp ();
my $jobs = 1;
my $repeat = 1;
my $pid = fork // DIE "fork: $!";
if ($pid == 0) {
close $wr if $wr;
+ $SIG{USR1} = undef; # undo parent $SIG{USR1}
$worker = $$;
while (1) {
my $r = sysread($rd, my $buf, UINT_SIZE);
$tb->reset;
}
kill 'USR1', $producer if !$eof; # sets $eof in $producer
- DIE join('', map { "E: $_\n" } @err) if @err;
+ if (@err) { # write to run_log for $sigchld handler
+ syswrite($run_log, "$$ @err\n");
+ DIE join('', map { "E: $_\n" } @err);
+ }
exit(0);
} else {
$pids{$pid} = $j;
pipe(my ($rd, $wr)) or DIE "pipe: $!";
# fill the queue before forking so children can start earlier
- my $n = (_POSIX_PIPE_BUF / UINT_SIZE);
+ my $n = (POSIX::PIPE_BUF / UINT_SIZE);
if ($n >= $#todo) {
print $wr join('', map { pack('I', $_) } (0..$#todo)) or DIE;
undef $wr;
print $OLDOUT "1..".($repeat * scalar(@tests))."\n" if $repeat >= 0;
if ($lei_env && $$ == $owner_pid) {
my $opt = { 1 => $OLDOUT, 2 => $OLDERR };
+ my $cur_daemon_pid;
+ run_script([qw(lei daemon-pid)], $lei_env, { 1 => \$cur_daemon_pid });
run_script([qw(lei daemon-kill)], $lei_env, $opt);
+ DIE "lei daemon restarted\n" if $cur_daemon_pid != $lei_daemon_pid;
}