From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.0 required=3.0 tests=ALL_TRUSTED,BAYES_00 shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id A72401F464 for ; Wed, 27 Nov 2019 01:33:34 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 1/2] dskqxs: fix missing EV_DISPATCH define Date: Wed, 27 Nov 2019 01:33:32 +0000 Message-Id: <20191127013333.94381-2-e@80x24.org> In-Reply-To: <20191127013333.94381-1-e@80x24.org> References: <20191127013333.94381-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: Oops, IO::KQueue support was broken due to this missing constant. Add a new ds-kqxs.t test case to ensure we test the IO::KQueue path if IO::KQueue is available. --- MANIFEST | 1 + lib/PublicInbox/DSKQXS.pm | 2 ++ t/ds-kqxs.t | 14 ++++++++++++++ t/ds-poll.t | 16 ++++------------ 4 files changed, 21 insertions(+), 12 deletions(-) create mode 100644 t/ds-kqxs.t diff --git a/MANIFEST b/MANIFEST index 9fd639f5..a50c1246 100644 --- a/MANIFEST +++ b/MANIFEST @@ -207,6 +207,7 @@ t/config_limiter.t t/content_id.t t/convert-compact.t t/data/0001.patch +t/ds-kqxs.t t/ds-leak.t t/ds-poll.t t/edit.t diff --git a/lib/PublicInbox/DSKQXS.pm b/lib/PublicInbox/DSKQXS.pm index 1c3b970b..84e146f8 100644 --- a/lib/PublicInbox/DSKQXS.pm +++ b/lib/PublicInbox/DSKQXS.pm @@ -21,6 +21,8 @@ use PublicInbox::Syscall qw(EPOLLONESHOT EPOLLIN EPOLLOUT EPOLLET our @EXPORT_OK = qw(epoll_ctl epoll_wait); my $owner_pid = -1; # kqueue is close-on-fork (yes, fork, not exec) +sub EV_DISPATCH () { 0x0080 } + # map EPOLL* bits to kqueue EV_* flags for EV_SET sub kq_flag ($$) { my ($bit, $ev) = @_; diff --git a/t/ds-kqxs.t b/t/ds-kqxs.t new file mode 100644 index 00000000..785570c3 --- /dev/null +++ b/t/ds-kqxs.t @@ -0,0 +1,14 @@ +# Copyright (C) 2019 all contributors +# Licensed the same as Danga::Socket (and Perl5) +# License: GPL-1.0+ or Artistic-1.0-Perl +# +# +use strict; +use Test::More; +unless (eval { require IO::KQueue }) { + my $m = $^O !~ /bsd/ ? 'DSKQXS is only for *BSD systems' + : "no IO::KQueue, skipping $0: $@"; + plan skip_all => $m; +} +local $ENV{TEST_IOPOLLER} = 'PublicInbox::DSKQXS'; +require './t/ds-poll.t'; diff --git a/t/ds-poll.t b/t/ds-poll.t index c9dcdd22..21f8b295 100644 --- a/t/ds-poll.t +++ b/t/ds-poll.t @@ -7,7 +7,7 @@ use strict; use warnings; use Test::More; use PublicInbox::Syscall qw(:epoll); -my $cls = 'PublicInbox::DSPoll'; +my $cls = $ENV{TEST_IOPOLLER} // 'PublicInbox::DSPoll'; use_ok $cls; my $p = $cls->new; @@ -43,16 +43,8 @@ my @fds = sort(map { $_->[0] } @$events); my @exp = sort((fileno($r), fileno($x))); is_deeply(\@fds, \@exp, 'got both ready FDs'); -# EPOLL_CTL_DEL doesn't matter for kqueue, we do it in native epoll -# to avoid a kernel-wide lock; but its not needed for native kqueue -# paths so DSKQXS makes it a noop (as did Danga::Socket::close). -SKIP: { - if ($cls ne 'PublicInbox::DSPoll') { - skip "$cls doesn't handle EPOLL_CTL_DEL", 2; - } - is($p->epoll_ctl(EPOLL_CTL_DEL, fileno($r), 0), 0, 'EPOLL_CTL_DEL OK'); - $n = $p->epoll_wait(9, 0, $events); - is($n, 0, 'nothing ready after EPOLL_CTL_DEL'); -}; +is($p->epoll_ctl(EPOLL_CTL_DEL, fileno($r), 0), 0, 'EPOLL_CTL_DEL OK'); +$n = $p->epoll_wait(9, 0, $events); +is($n, 0, 'nothing ready after EPOLL_CTL_DEL'); done_testing;