From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.2 required=3.0 tests=ALL_TRUSTED,AWL,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF shortcircuit=no autolearn=ham autolearn_force=no version=3.4.6 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id A08551F87D for ; Tue, 17 Oct 2023 23:38:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=80x24.org; s=selector1; t=1697585898; bh=lX4MhOUt0UfUwz1wPL9+pWgDnhbL7luz/EGOZYcyIrs=; h=From:To:Subject:Date:In-Reply-To:References:From; b=rNqPhC7PhY75/kLeh+UouZzBhMYuKcJkImtRFtpTvmETI5e/Kd9bH7nvfY89Y4vi8 0goQH+MmeFcrVLgMFGIrMf44PPnarM/9QTngVUQtSkwRIwKjC764B+SHwng6F1tqcO /gDByldeITyK5rnj4umdJ2maOtE9t20r91cmb20I= From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 15/30] ds: get rid of SetLoopTimeout Date: Tue, 17 Oct 2023 23:38:00 +0000 Message-ID: <20231017233815.1637932-16-e@80x24.org> In-Reply-To: <20231017233815.1637932-1-e@80x24.org> References: <20231017233815.1637932-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: It's not worth the code and memory to have a setter method we never use outside of tests. --- lib/PublicInbox/DS.pm | 24 +++++++----------------- t/dir_idle.t | 2 +- t/ds-leak.t | 4 ++-- xt/mem-imapd-tls.t | 8 ++++---- xt/mem-nntpd-tls.t | 8 ++++---- 5 files changed, 18 insertions(+), 28 deletions(-) diff --git a/lib/PublicInbox/DS.pm b/lib/PublicInbox/DS.pm index 9960937d..6041c6b5 100644 --- a/lib/PublicInbox/DS.pm +++ b/lib/PublicInbox/DS.pm @@ -47,7 +47,7 @@ our (%AWAIT_PIDS, # pid => [ $callback, @args ] @post_loop_do, # subref + args to call at the end of each loop - $LoopTimeout, # timeout of event loop in milliseconds + $loop_timeout, # timeout of event loop in milliseconds @Timers, # timers %UniqTimer, $in_loop, @@ -89,20 +89,10 @@ sub Reset { scalar(@{$cur_runq // []})); # do not vivify cur_runq $reap_armed = undef; - $LoopTimeout = -1; # no timeout by default + $loop_timeout = -1; # no timeout by default $Poller = PublicInbox::Select->new; } -=head2 C<< CLASS->SetLoopTimeout( $timeout ) >> - -Set the loop timeout for the event loop to some value in milliseconds. - -A timeout of 0 (zero) means poll forever. A timeout of -1 means poll and return -immediately. - -=cut -sub SetLoopTimeout { $LoopTimeout = $_[1] + 0 } - sub _add_named_timer { my ($name, $secs, $coderef, @args) = @_; my $fire_time = now() + $secs; @@ -163,7 +153,7 @@ sub next_tick () { sub RunTimers { next_tick(); - return (($nextq || $ToClose) ? 0 : $LoopTimeout) unless @Timers; + return (($nextq || $ToClose) ? 0 : $loop_timeout) unless @Timers; my $now = now(); @@ -177,16 +167,16 @@ sub RunTimers { # timers may enqueue into nextq: return 0 if ($nextq || $ToClose); - return $LoopTimeout unless @Timers; + return $loop_timeout unless @Timers; # convert time to an even number of milliseconds, adding 1 # extra, otherwise floating point fun can occur and we'll # call RunTimers like 20-30 times, each returning a timeout # of 0.0000212 seconds - my $timeout = int(($Timers[0][0] - $now) * 1000) + 1; + my $t = int(($Timers[0][0] - $now) * 1000) + 1; # -1 is an infinite timeout, so prefer a real timeout - ($LoopTimeout < 0 || $LoopTimeout >= $timeout) ? $timeout : $LoopTimeout + ($loop_timeout < 0 || $loop_timeout >= $t) ? $t : $loop_timeout } sub sig_setmask { sigprocmask(SIG_SETMASK, @_) or die "sigprocmask: $!" } @@ -305,7 +295,7 @@ sub event_loop (;$$) { sig_setmask($oldset) if $oldset; sigprocmask(SIG_UNBLOCK, unblockset($sig)) or die "SIG_UNBLOCK: $!"; - PublicInbox::DS->SetLoopTimeout(1000); + $loop_timeout = 1000; } $_[0] = $sigfd = $sig = undef; # $_[0] == sig local $in_loop = 1; diff --git a/t/dir_idle.t b/t/dir_idle.t index 02759b54..35c800f9 100644 --- a/t/dir_idle.t +++ b/t/dir_idle.t @@ -11,7 +11,7 @@ my @x; my $cb = sub { push @x, \@_ }; my $di = PublicInbox::DirIdle->new($cb); $di->add_watches(["$tmpdir/a", "$tmpdir/c"], 1); -PublicInbox::DS->SetLoopTimeout(1000); +$PublicInbox::DS::loop_timeout = 1000; my $end = 3 + now; local @PublicInbox::DS::post_loop_do = (sub { scalar(@x) == 0 && now < $end }); rmdir("$tmpdir/a/b") or xbail "rmdir $!"; diff --git a/t/ds-leak.t b/t/ds-leak.t index eaca05b8..179997eb 100644 --- a/t/ds-leak.t +++ b/t/ds-leak.t @@ -11,7 +11,7 @@ if ('close-on-exec for epoll and kqueue') { my $pid; my $evfd_re = qr/(?:kqueue|eventpoll)/i; - PublicInbox::DS->SetLoopTimeout(0); + $PublicInbox::DS::loop_timeout = 0; local @PublicInbox::DS::post_loop_do = (sub { 0 }); # make sure execve closes if we're using fork() @@ -54,7 +54,7 @@ SKIP: { } my $cb = sub {}; for my $i (0..$n) { - PublicInbox::DS->SetLoopTimeout(0); + $PublicInbox::DS::loop_timeout = 0; local @PublicInbox::DS::post_loop_do = ($cb); PublicInbox::DS::event_loop(); PublicInbox::DS->Reset; diff --git a/xt/mem-imapd-tls.t b/xt/mem-imapd-tls.t index 00199a9b..58581017 100644 --- a/xt/mem-imapd-tls.t +++ b/xt/mem-imapd-tls.t @@ -81,7 +81,7 @@ sub once { 0 }; # stops event loop # setup the event loop so that it exits at every step # while we're still doing connect(2) -PublicInbox::DS->SetLoopTimeout(0); +$PublicInbox::DS::loop_timeout = 0; local @PublicInbox::DS::post_loop_do = (\&once); my $pid = $td->{pid}; if ($^O eq 'linux' && open(my $f, '<', "/proc/$pid/status")) { @@ -100,21 +100,21 @@ foreach my $n (1..$nfd) { # try not to overflow the listen() backlog: if (!($n % 128) && $DONE != $n) { diag("nr: ($n) $DONE/$nfd"); - PublicInbox::DS->SetLoopTimeout(-1); + $PublicInbox::DS::loop_timeout = -1; local @PublicInbox::DS::post_loop_do = (sub { $DONE != $n }); # clear the backlog: PublicInbox::DS::event_loop(); # resume looping - PublicInbox::DS->SetLoopTimeout(0); + $PublicInbox::DS::loop_timeout = 0; } } # run the event loop normally, now: diag "done?: @".time." $DONE/$nfd"; if ($DONE != $nfd) { - PublicInbox::DS->SetLoopTimeout(-1); + $PublicInbox::DS::loop_timeout = -1; local @PublicInbox::DS::post_loop_do = (sub { $DONE != $nfd }); PublicInbox::DS::event_loop(); } diff --git a/xt/mem-nntpd-tls.t b/xt/mem-nntpd-tls.t index f9b98a6b..ec639a8b 100644 --- a/xt/mem-nntpd-tls.t +++ b/xt/mem-nntpd-tls.t @@ -104,7 +104,7 @@ sub once { 0 }; # stops event loop # setup the event loop so that it exits at every step # while we're still doing connect(2) -PublicInbox::DS->SetLoopTimeout(0); +$PublicInbox::DS::loop_timeout = 0; local @PublicInbox::DS::post_loop_do = (\&once); foreach my $n (1..$nfd) { @@ -119,14 +119,14 @@ foreach my $n (1..$nfd) { # try not to overflow the listen() backlog: if (!($n % 128) && $n != $DONE) { diag("nr: ($n) $DONE/$nfd"); - PublicInbox::DS->SetLoopTimeout(-1); + $PublicInbox::DS::loop_timeout = -1; @PublicInbox::DS::post_loop_do = (sub { $DONE != $n }); # clear the backlog: PublicInbox::DS::event_loop(); # resume looping - PublicInbox::DS->SetLoopTimeout(0); + $PublicInbox::DS::loop_timeout = 0; @PublicInbox::DS::post_loop_do = (\&once); } } @@ -140,7 +140,7 @@ $dump_rss->(); # run the event loop normally, now: if ($DONE != $nfd) { - PublicInbox::DS->SetLoopTimeout(-1); + $PublicInbox::DS::loop_timeout = -1; @PublicInbox::DS::post_loop_do = (sub { diag "done: ".time." $DONE"; $DONE != $nfd;