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 8E15B1F4BC for ; Mon, 24 Jun 2019 02:58:08 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 46/57] ds: always use EV_ADD with EV_SET Date: Mon, 24 Jun 2019 02:52:47 +0000 Message-Id: <20190624025258.25592-47-e@80x24.org> In-Reply-To: <20190624025258.25592-1-e@80x24.org> References: <20190624025258.25592-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: kqueue EV_ONESHOT semantics are different than epoll EPOLLONESHOT. epoll only disables watches for that event while keeping the item in the rbtree for future EPOLL_CTL_MOD. kqueue removes the watch from the filter set entirely, necessitating the use of EV_ADD for future modifications. --- lib/PublicInbox/DS.pm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/PublicInbox/DS.pm b/lib/PublicInbox/DS.pm index 0e48ed07..8f77ce24 100644 --- a/lib/PublicInbox/DS.pm +++ b/lib/PublicInbox/DS.pm @@ -321,7 +321,7 @@ sub kq_flag ($$) { my $fl = EV_ADD() | EV_ENABLE(); ($ev & EPOLLONESHOT) ? ($fl|EV_ONESHOT()) : $fl; } else { - EV_DISABLE(); + EV_ADD() | EV_DISABLE(); } } @@ -364,8 +364,8 @@ retry: } } elsif ($HaveKQueue) { - $KQueue->EV_SET($fd, EVFILT_READ(), EV_ADD() | kq_flag(EPOLLIN, $ev)); - $KQueue->EV_SET($fd, EVFILT_WRITE(), EV_ADD() | kq_flag(EPOLLOUT, $ev)); + $KQueue->EV_SET($fd, EVFILT_READ(), kq_flag(EPOLLIN, $ev)); + $KQueue->EV_SET($fd, EVFILT_WRITE(), kq_flag(EPOLLOUT, $ev)); } Carp::cluck("PublicInbox::DS::new blowing away existing descriptor map for fd=$fd ($DescriptorMap{$fd})") -- EW