From fdefc70113c221ce7028b230971ab88d590f5827 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sun, 12 Jan 2020 21:17:52 +0000 Subject: [PATCH] ds: rely on autovivification for nextq Another place we can delay creating arrays until needed. --- lib/PublicInbox/DS.pm | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/lib/PublicInbox/DS.pm b/lib/PublicInbox/DS.pm index f7c8ad2b..2f41ea45 100644 --- a/lib/PublicInbox/DS.pm +++ b/lib/PublicInbox/DS.pm @@ -71,11 +71,10 @@ Reset all state =cut sub Reset { %DescriptorMap = (); - $nextq = []; $WaitPids = []; $later_queue = []; $EXPMAP = {}; - $ToClose = $reap_timer = $later_timer = $exp_timer = undef; + $nextq = $ToClose = $reap_timer = $later_timer = $exp_timer = undef; $LoopTimeout = -1; # no timeout by default @Timers = (); @@ -179,8 +178,8 @@ sub FirstTimeEventLoop { sub now () { clock_gettime(CLOCK_MONOTONIC) } sub next_tick () { - my $q = $nextq; - $nextq = []; + my $q = $nextq or return; + $nextq = undef; for (@$q) { # we avoid "ref" on blessed refs to workaround a Perl 5.16.3 leak: # https://rt.perl.org/Public/Bug/Display.html?id=114340 @@ -196,7 +195,7 @@ sub next_tick () { sub RunTimers { next_tick(); - return ((@$nextq || $ToClose) ? 0 : $LoopTimeout) unless @Timers; + return (($nextq || $ToClose) ? 0 : $LoopTimeout) unless @Timers; my $now = now(); @@ -207,7 +206,7 @@ sub RunTimers { } # timers may enqueue into nextq: - return 0 if (@$nextq || $ToClose); + return 0 if ($nextq || $ToClose); return $LoopTimeout unless @Timers; @@ -249,7 +248,7 @@ sub reap_pids { } # reentrant SIGCHLD handler (since reap_pids is not reentrant) -sub enqueue_reap ($) { push @$nextq, \&reap_pids }; +sub enqueue_reap ($) { push @$nextq, \&reap_pids }; # autovivifies sub in_loop () { $in_loop } @@ -353,7 +352,7 @@ sub new { ### I N S T A N C E M E T H O D S ##################################################################### -sub requeue ($) { push @$nextq, $_[0] } +sub requeue ($) { push @$nextq, $_[0] } # autovivifies =head2 C<< $obj->close >> -- 2.44.0