* [PATCH 09/11] ds: rely on autovivification for $later_queue
2020-01-12 21:17 7% [PATCH 00/11] ds: various cleanups and fixes Eric Wong
@ 2020-01-12 21:17 6% ` Eric Wong
0 siblings, 0 replies; 2+ results
From: Eric Wong @ 2020-01-12 21:17 UTC (permalink / raw)
To: meta
No reason to have an empty arrayref lying around when not
everybody needs it.
Re-indent the later-related subs since we're changing a
bunch of lines, anyways.
---
lib/PublicInbox/DS.pm | 17 +++++++----------
1 file changed, 7 insertions(+), 10 deletions(-)
diff --git a/lib/PublicInbox/DS.pm b/lib/PublicInbox/DS.pm
index a78037f6..fc3c82cc 100644
--- a/lib/PublicInbox/DS.pm
+++ b/lib/PublicInbox/DS.pm
@@ -40,7 +40,7 @@ use Carp qw(confess carp);
my $nextq; # queue for next_tick
my $wait_pids; # list of [ pid, callback, callback_arg ]
-my $later_queue; # callbacks
+my $later_queue; # list of callbacks to run at some later interval
my $EXPMAP; # fd -> [ idle_time, $self ]
our $EXPTIME = 180; # 3 minutes
my ($later_timer, $reap_timer, $exp_timer);
@@ -71,8 +71,7 @@ Reset all state
=cut
sub Reset {
%DescriptorMap = ();
- $wait_pids = undef;
- $later_queue = [];
+ $wait_pids = $later_queue = undef;
$EXPMAP = {};
$nextq = $ToClose = $reap_timer = $later_timer = $exp_timer = undef;
$LoopTimeout = -1; # no timeout by default
@@ -632,16 +631,14 @@ sub dwaitpid ($$$) {
}
sub _run_later () {
- my $run = $later_queue;
- $later_timer = undef;
- $later_queue = [];
- $_->() for @$run;
+ my $run = $later_queue or return;
+ $later_timer = $later_queue = undef;
+ $_->() for @$run;
}
sub later ($) {
- my ($cb) = @_;
- push @$later_queue, $cb;
- $later_timer //= add_timer(60, \&_run_later);
+ push @$later_queue, $_[0]; # autovivifies @$later_queue
+ $later_timer //= add_timer(60, \&_run_later);
}
sub expire_old () {
^ permalink raw reply related [relevance 6%]
* [PATCH 00/11] ds: various cleanups and fixes
@ 2020-01-12 21:17 7% Eric Wong
2020-01-12 21:17 6% ` [PATCH 09/11] ds: rely on autovivification for $later_queue Eric Wong
0 siblings, 1 reply; 2+ results
From: Eric Wong @ 2020-01-12 21:17 UTC (permalink / raw)
To: meta
Start taking advantage of autovivification to simplify our code
and reduce allocations. Also, I believe it's my first time
using the return value of "push".
Eric Wong (11):
ds: new: avoid redundant check, make clobbering fatal
ds: add_timer: rename from AddTimer, remove a parameter
ds: add an in_loop() function for Inbox.pm use
ds: remove Timer->cancel and Timer class+bless
ds: PostEventLoop: guard ToClose against DESTROY side-effects
ds|http|nntp: simplify {wbuf} population
ds: rely on autovivification for nextq
ds: rely on autovivication for waitpid bits
ds: rely on autovivification for $later_queue
ds: flatten $EXPMAP, delete entries on close
sigfd: simplify loop and improve documentation
lib/PublicInbox/DS.pm | 200 +++++++++++++++++----------------------
lib/PublicInbox/HTTP.pm | 6 +-
lib/PublicInbox/Inbox.pm | 2 +-
lib/PublicInbox/NNTP.pm | 11 +--
lib/PublicInbox/Sigfd.pm | 13 +--
t/ds-leak.t | 2 +-
6 files changed, 105 insertions(+), 129 deletions(-)
^ permalink raw reply [relevance 7%]
Results 1-2 of 2 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2020-01-12 21:17 7% [PATCH 00/11] ds: various cleanups and fixes Eric Wong
2020-01-12 21:17 6% ` [PATCH 09/11] ds: rely on autovivification for $later_queue Eric Wong
Code repositories for project(s) associated with this public inbox
https://80x24.org/public-inbox.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).