]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/TestCommon.pm
testcommon: DESTROY: wait for killed daemon
[public-inbox.git] / lib / PublicInbox / TestCommon.pm
index 386610ff5cbf6551eb5eda949ee3d8d1536f1776..e9efbac71264fe47b36f87c5bb9252c26c36aff1 100644 (file)
@@ -119,11 +119,11 @@ sub _undo_redirects ($) {
        }
 }
 
-# $opt->{run_mode} (or $ENV{TEST_RUN_MODE}) allows chosing between
+# $opt->{run_mode} (or $ENV{TEST_RUN_MODE}) allows choosing between
 # three ways to spawn our own short-lived Perl scripts for testing:
 #
 # 0 - (fork|vfork) + execve, the most realistic but slowest
-# 1 - preloading and running in a forked subprocess (fast)
+# 1 - (not currently implemented)
 # 2 - preloading and running in current process (slightly faster than 1)
 #
 # 2 is not compatible with scripts which use "exit" (which we'll try to
@@ -247,7 +247,7 @@ sub wait_for_tail () { sleep(2) }
 sub start_script {
        my ($cmd, $env, $opt) = @_;
        my ($key, @argv) = @$cmd;
-       my $run_mode = $ENV{TEST_RUN_MODE} // $opt->{run_mode} // 1;
+       my $run_mode = $ENV{TEST_RUN_MODE} // $opt->{run_mode} // 2;
        my $sub = $run_mode == 0 ? undef : key2sub($key);
        my $tail_pid;
        if (my $tail_cmd = $ENV{TAIL}) {
@@ -319,8 +319,9 @@ sub kill {
 }
 
 sub join {
-       my ($self) = @_;
+       my ($self, $sig) = @_;
        my $pid = delete $self->{pid} or return;
+       CORE::kill($sig, $pid) if defined $sig;
        my $ret = waitpid($pid, 0);
        defined($ret) or die "waitpid($pid): $!";
        $ret == $pid or die "waitpid($pid) != $ret";
@@ -333,8 +334,7 @@ sub DESTROY {
                PublicInbox::TestCommon::wait_for_tail();
                CORE::kill('TERM', $tail);
        }
-       my $pid = delete $self->{pid} or return;
-       CORE::kill('TERM', $pid);
+       $self->join('TERM');
 }
 
 1;