use POSIX ();
+use Errno qw(EAGAIN);
+
use Exporter 'import';
our @EXPORT = qw(worker worker_next);
use File::Basename qw(basename);
my @x;
+my $options;
sub worker {
- my ($display, $x, $outdir) = @_;
+ my ($display, $x, $outdir, $optref) = @_;
# make sure $x hangs around
push @x, $x;
+ # store the options hashref
+ $options = $optref;
+
socketpair(my $ipc_child, my $ipc, AF_UNIX, SOCK_DGRAM, PF_UNSPEC)
or die "socketpair: $!";
my $ipc = $self->{ipc};
my $ipc_fd = fileno($ipc);
- while (defined(my $file = $ipc->getline)) {
+ while (1) {
+ my $file = $ipc->getline;
+ if (!defined($file)) {
+ next if $! == EAGAIN;
+ last;
+ }
chomp $file;
exit unless $file;
$test->failure_output(\*STDERR);
$test->todo_output(\*STDOUT);
- @ENV{qw(DISPLAY TESTNAME OUTDIR VALGRIND STRACE COVERAGE RESTART)}
- = ($self->{display}, basename($file), $outdir, 0, 0, 0, 0);
+ @ENV{qw(DISPLAY TESTNAME OUTDIR VALGRIND STRACE XTRACE COVERAGE RESTART)}
+ = ($self->{display},
+ basename($file),
+ $outdir,
+ $options->{valgrind},
+ $options->{strace},
+ $options->{xtrace},
+ $options->{coverage},
+ $options->{restart});
package main;
local $@;