require PublicInbox::InboxIdle;
require PublicInbox::DS;
require PublicInbox::Syscall;
- require PublicInbox::Sigfd;
my $idler = PublicInbox::InboxIdle->new($self->{cfg});
if (!$self->{cfg}) {
$idler->watch_inbox($_) for (@{ibx_sorted($self, 'active')});
tcp_host_port test_lei lei lei_ok $lei_out $lei_err $lei_opt
test_httpd no_httpd_errors xbail require_cmd is_xdeeply tail_f
ignore_inline_c_missing no_pollerfd no_coredump cfg_new
+ require_fast_reliable_signals
strace strace_inject lsof_pid oct_is $find_xh_pid);
require Test::More;
my @methods = grep(!/\W/, @Test::More::EXPORT);
1;
}
+sub require_fast_reliable_signals (;$) {
+ state $ok = do {
+ require PublicInbox::Sigfd;
+ my $s = PublicInbox::Sigfd->new({}) ? 1 : $ENV{TEST_UNRELIABLE};
+ PublicInbox::DS->Reset;
+ $s;
+ };
+ return $ok if $ok || defined(wantarray);
+ my $m = "fast, reliable signals not available(\$^O=$^O)";
+ @_ ? skip($m, 1) : plan(skip_all => $m);
+}
+
sub require_bsd (;$) {
state $ok = ($^O =~ m!\A(?:free|net|open)bsd\z! ||
$^O eq 'dragonfly');
require_mods qw(-httpd);
use IO::Socket::UNIX;
use POSIX qw(mkfifo);
-require PublicInbox::Sigfd;
my ($tmpdir, $for_destroy) = tmpdir();
my $unix = "$tmpdir/unix.sock";
my $psgi = './t/httpd-corner.psgi';
ok(-S $unix, 'unix socket still exists');
}
-# portable Perl can delay or miss signal dispatches due to races,
-# so disable some tests on systems lacking signalfd(2) or EVFILT_SIGNAL
-my $has_sigfd = PublicInbox::Sigfd->new({}) ? 1 : $ENV{TEST_UNRELIABLE};
-PublicInbox::DS::Reset() if $has_sigfd;
-
sub delay_until {
my ($cond, $msg) = @_;
my $end = time + 30;
SKIP: {
require_mods('Net::Server::Daemonize', 52);
- $has_sigfd or skip('signalfd / EVFILT_SIGNAL not available', 52);
+ require_fast_reliable_signals 1;
my $pid_file = "$tmpdir/pid";
my $read_pid = sub {
my $f = shift;
use v5.12;
use Test::More;
use PublicInbox::Spawn qw(which spawn popen_rd run_qx);
-require PublicInbox::Sigfd;
require PublicInbox::DS;
use PublicInbox::OnDestroy;
my $rlimit_map = PublicInbox::Spawn->can('rlimit_map');
use PublicInbox::IO qw(write_file try_cat);
use PublicInbox::Spawn qw(spawn);
use PublicInbox::Git qw(git_exe);
-require PublicInbox::Sigfd;
my $git_dir = $ENV{GIANT_GIT_DIR} //
plan 'skip_all' => 'GIANT_GIT_DIR not defined';
require_mods qw(-httpd psgi);
\%chld_status;
};
-my $sigfd = PublicInbox::Sigfd->new;
my $reload_cfg = sub {
write_file '>>', $henv->{PI_CONFIG}, @_;
kill 'HUP', $PublicInbox::TestCommon::CURRENT_DAEMON->{pid};
- # signalfd/EVFILT_SIGNAL platforms should handle signals more
- # predictably and not need tick
- tick(1) unless $sigfd;
+ tick(1) unless require_fast_reliable_signals;
};
my $ck_503 = sub {