]> Sergey Matveev's repositories - public-inbox.git/blobdiff - t/run.perl
www: drop --subject from "git send-email" instructions
[public-inbox.git] / t / run.perl
index 5082125bab6e609711089d2aff3649a513fed474..cf80a8a17ecedc54304d5280744e5b5d857e4209 100755 (executable)
@@ -18,7 +18,7 @@ use PublicInbox::Spawn;
 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;
@@ -168,6 +168,7 @@ my $start_worker = sub {
        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);
@@ -182,7 +183,10 @@ my $start_worker = sub {
                        $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;
@@ -199,7 +203,7 @@ for (my $i = $repeat; $i != 0; $i--) {
        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;
@@ -254,5 +258,8 @@ for (my $i = $repeat; $i != 0; $i--) {
 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;
 }