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 A88491F9F3 for ; Wed, 29 Sep 2021 12:40:47 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 2/2] ds: drop ::later support Date: Wed, 29 Sep 2021 07:40:47 -0500 Message-Id: <20210929124047.2128-3-e@80x24.org> In-Reply-To: <20210929124047.2128-1-e@80x24.org> References: <20210929124047.2128-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: add_uniq_timer seems sufficient, and we'll drop the last user of ::later (IMAP) and switch to unique timers. --- lib/PublicInbox/DS.pm | 19 ++----------------- lib/PublicInbox/IMAP.pm | 13 ++++++------- 2 files changed, 8 insertions(+), 24 deletions(-) diff --git a/lib/PublicInbox/DS.pm b/lib/PublicInbox/DS.pm index a25e3fe84857..37cd6087cafb 100644 --- a/lib/PublicInbox/DS.pm +++ b/lib/PublicInbox/DS.pm @@ -37,7 +37,6 @@ our @EXPORT_OK = qw(now msg_more dwaitpid add_timer add_uniq_timer); my %Stack; my $nextq; # queue for next_tick my $wait_pids; # list of [ pid, callback, callback_arg ] -my $later_q; # list of callbacks to run at some later interval my $EXPMAP; # fd -> idle_time our $EXPTIME = 180; # 3 minutes my ($reap_armed); @@ -78,11 +77,11 @@ sub Reset { my @q = delete @Stack{keys %Stack}; for my $q (@q) { @$q = () } $EXPMAP = undef; - $wait_pids = $later_q = $nextq = $ToClose = undef; + $wait_pids = $nextq = $ToClose = undef; $_io = undef; # closes real $Epoll FD $Epoll = undef; # may call DSKQXS::DESTROY } while (@Timers || keys(%Stack) || $nextq || $wait_pids || - $later_q || $ToClose || keys(%DescriptorMap) || + $ToClose || keys(%DescriptorMap) || $PostLoopCallback || keys(%UniqTimer)); $reap_armed = undef; @@ -298,7 +297,6 @@ sub EventLoop { $obj->event_step; } } while (PostEventLoop()); - _run_later(); } =head2 C<< CLASS->SetPostLoopCallback( CODEREF ) >> @@ -658,19 +656,6 @@ sub dwaitpid ($;$$) { } } -sub _run_later () { - my $q = $later_q or return; - $later_q = undef; - $Stack{later_q} = $q; - $_->() for @$q; - delete $Stack{later_q}; -} - -sub later ($) { - push @$later_q, $_[0]; # autovivifies @$later_q - add_uniq_timer('later', 60, \&_run_later); -} - sub expire_old () { my $cur = $EXPMAP or return; $EXPMAP = undef; diff --git a/lib/PublicInbox/IMAP.pm b/lib/PublicInbox/IMAP.pm index 27013ea563c1..bc34f4feea1e 100644 --- a/lib/PublicInbox/IMAP.pm +++ b/lib/PublicInbox/IMAP.pm @@ -316,20 +316,19 @@ sub on_inbox_unlock { } } -# called every X minute(s) or so by PublicInbox::DS::later -my $IDLERS = {}; -my $idle_timer; +# called every minute or so by PublicInbox::DS::later +my $IDLERS; # fileno($obj->{sock}) => PublicInbox::IMAP sub idle_tick_all { my $old = $IDLERS; - $IDLERS = {}; + $IDLERS = undef; for my $i (values %$old) { next if ($i->{wbuf} || !exists($i->{-idle_tag})); $i->update_idle_time or next; $IDLERS->{fileno($i->{sock})} = $i; $i->write(\"* OK Still here\r\n"); } - $idle_timer = scalar keys %$IDLERS ? - PublicInbox::DS::later(\&idle_tick_all) : undef; + $IDLERS and + PublicInbox::DS::add_uniq_timer('idle', 60, \&idle_tick_all); } sub cmd_idle ($$) { @@ -346,7 +345,7 @@ sub cmd_idle ($$) { $ibx->subscribe_unlock($fd, $self); $self->{imapd}->idler_start; } - $idle_timer //= PublicInbox::DS::later(\&idle_tick_all); + PublicInbox::DS::add_uniq_timer('idle', 60, \&idle_tick_all); $IDLERS->{$fd} = $self; \"+ idling\r\n" }